Qu'est-ce qui différencie exactement ces implémentations de 'quand'?Différence entre une implémentation de 'quand' en tant que fonction et en tant que macro
(define-syntax when
(syntax-rules()
((_ pred b1 ...)
(if pred (begin b1 ...)))))
contre
(define (my-when pred b1 ...)
(if pred (begin b1 ...)))
Par exemple, lorsque 'my-quand' est utilisé dans cette boucle macro:
(define-syntax for
(syntax-rules()
((_ (i from to) b1 ...)
(let loop((i from))
(my-when (< i to)
b1 ...
(loop (+ i 1)))))))
une erreur se produit:
(pour (i 0 10) (affichage i))
; !: profondeur de l'interruption récursion maximale a dépassé
Je ne pense pas que « quand » peut être mis en œuvre en fonction, mais je ne sais pas pourquoi ...
Belle explication! Pouvez-vous clarifier pourquoi la boucle (+ i 1)) n'est évaluée que lorsque la condition est vraie? Pour moi, il semble que cela ne serait évalué que si la condition est fausse puisque la macro 'when' ne semble pas "utiliser" la boucle dans son instruction if. – wes
@wes La boucle fait partie du "..:" de la macro 'my-when'. J'espère que la modification aide. – molbdnilo