A mesure que j'apprends le schéma et la raquette, je me retrouve à répéter ce schéma encore et encore. Où j'ai une fonction récursive où certains paramètres de la fonction changent mais pas certains paramètres. Je construis une fonction externe qui prend tous les paramètres et à l'intérieur de celle-ci définit une fonction interne qui ne prend que les paramètres changeants et se répète sur cela.Macro pour simplifier la syntaxe de la fonction récursive
Comme exemple concret Heres un cas basé un peu sur un exercice de fonction dans « The Little Schemer »
;inserts an item to the right of an element in a list
(define (insert-to-right new old lat)
(define (insert-to-right lat)
(cond
[(null? lat) lat]
[(eq? old (car lat)) (cons old (cons new (cdr lat)))]
[else (cons (car lat) (insert-to-right (cdr lat)))]))
(insert-to-right lat))
Est-il possible de construire une macro définir * et un opérateur (par exemple une barre verticale) telle que je taper:
(define* (insert-to-right new old | lat)
(cond
[(null? lat) lat]
[(eq? old (car lat)) (cons old (cons new (cdr lat)))]
[else (cons (car lat) (insert-to-right (cdr lat)))]))
et ce serait alors se développer dans la première forme de tous les paramètres étant transmis à la fonction extérieure, mais seulement les paramètres après la barre verticale étant transmis à la boucle intérieure.
Merci Matthias. Je me demande comment je peux le faire sans une fonction interne ou un let nommé. –