#lang r7rs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Hulp Procedures ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Het schrijven van algemene hulpprocedures die niet specifiek bij een ADT ;; horen kan vaak nuttig zijn. Dit kan gaan van procedures voor het eenvoudiger ;; om iets te debuggen, of om een bepaald patroon op standaard datatypes van ;; Scheme te voorzien dat niet standaard aanwezig is. E.g., als je in je ;; implementatie regelmatig, en op verschillende plaatsen, de som van een lijst ;; getallen nodig hebt kan je in de globale omgeving daar een procedure voor ;; voorzien. De juiste hulpprocedures ondersteunen hierbij de rest van je ;; implementatie. (define-library () (import (scheme base) (scheme write)) (export debug random) (begin ;; We bieden de `random` van Racket simpel opnieuw aan. ;; De `#%require`-syntax is speciaal aan de Racket-implementatie van R7RS en ;; is gelijkaardig aan de `import` van R7RS (maar mag ook elders gebruikt ;; worden). ;; Voor je eigen project is het gebruiken van `random` op deze manier ;; uiteraard ook toegestaan. Het importeren van andere procedures uit ;; Racket, die niet beschikbaar zijn in R7RS, is ook toegelaten, maar ;; sommige procedures kunnen niet toegepast worden op enkele datastructuren ;; die R7RS gebruikt (bv. lijsten). Gebruik `#%require` dus op eigen risico. (#%require (only racket random)) ;; Een hulpprocedure om eenvoudig mee te debuggen (door de boolean op `#f` te zetten wordt er niets meer geprint). (define debugging? #t) (define (debug . msg) (if debugging? (begin (display msg) (newline))))))