J'ai écrit la règle de syntaxe suivante:modèle de schéma correspondant à
(define-syntax match-rewriter
(syntax-rules()
((_ (patt body) ...)
(λ (x) (match x (patt body) ... (_ x))))))
qui est essentiellement match-lambda
sauf qu'il retourne son argument si aucune correspondance ne se trouve plutôt que de lancer une exception.
Maintenant, je veux écrire une fonction, let_as_lambda
, qui prendra les chaînes du code source en entrée et réécrire les let
déclarations que la nouvelle fonction let_as_lambda
. Voilà ce que j'ai:
(define let_as_lambda
(match-rewriter (`(let((,<var> ,<val>)) ... ,<expressions>)
`((lambda (,<var> ...) ,<expressions>) ,<val> ...))))
Il est manifestement erroné que: montrant
'((λ ((x) ...) (+ x 2)) (3) ...)
encore les ellipses et la "3" entre parenthèses:
(let_as_lambda '(let((x 3)) (+ x 2)))
retours. Je crois que mon problème est que je ne comprends pas l'utilisation correcte des symboles `
, .
, et ,
dans la correspondance de modèle.
Si quelqu'un pouvait me montrer la bonne façon de faire cela, il serait grandement apprécié.
Merci.
Dang! J'écrivais le mien. Tu es trop rapide, Eli. Et votre commentaire sur la faisabilité d'ajouter "..." au quasiquote rend le vôtre meilleur que le mien l'aurait été aussi. Comme mes étudiants écriraient:> O –
Ah, merci, que "@" fait un monde de différence. :-) – Schemer