let*演習として、ソースコードを表す文字列をネストされた単項レットとして書き直そうとしています。これが私の最善の努力です:
(define let*→nested-unary-lets
(match-lambda
(`(let* (()) ,<exprs>)
`(let () ,<exprs>))
(`(let* ((,<var> ,<val>)) ,<exprs>)
`(let ((,<var> ,<val>)) (let () ,<exprs>)))
(`(let* ((,<var> ,<val>) ,<clauses>) ,<exprs>)
`(let ((,<var> ,<val>)) (let*→nested-unary-lets '(let* (,@<clauses>) ,<exprs>))))))
私が現在経験している問題は、そのパターンです。
`(let* ((,<var> ,<val>) ,<clauses>) ,<exprs>)
次のような文字列と一致しません:
'(let* ((a b) (c d) (e f)) <expressions>)
節という用語は、2番目の節にのみ一致し(c d)ます。(var val)残りのすべての句をリストとして受け取る必要があるように思われます((c d) (e f))。とにかくそうする必要があります。
アドバイスをいただければ幸いです。
私を困惑させるのは、exprsが式のリストと一致するため、句も一致しない理由を考えることができないことです。