Я пытаюсь сопоставить пусть и установить!в списках что-то вроде этого:
(map (lambda (x) (let ((x #f)))) <list>)
и
(map set! <list1> <list2>)
Но, конечно, ни то, ни другое не работает.
Есть ли способ сделать это?Любой совет приветствуется.
Спасибо.
Настоящая проблема в том, что я пытаюсь найти способ сопоставления с образцом letrec.Мне нужно иметь возможность сопоставить шаблон:
(letrec ((var val) ...) expr0 expr1 ...)
и преобразовать его - используя match-lambda - в эквивалентный вызов, используя только let и set!Это шаблон, который я пытаюсь эмулировать:
(letrec ((var val) ...) expr0 expr1 ...)
==>
(let ((var #f) ...)
(let ((temp val) ...)
(set! var temp) ...
(let () expr0 expr1 ...)))
Проблема заключается в переводе этого в синтаксис, который принимает match-lambda.Вот то, над чем я работал, предполагая, что был способ решить исходный вопрос:
(match-rewriter (`(letrec((,<var> ,<val>) ...) ,<expr> ...)
`((map (λ (x) (let ((x #f)))) ,<var>)
(let ((temp ,<val>)))
(map set! ,<var> temp)
(let () ,@<expr>))))
Любой совет приветствуется.
Спасибо.