Scheme让*作为嵌套的一元让
作为练习,我试图重写代表
let*
的源代码的字符串作为嵌套的unary 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>)
术语条款仅匹配第二个条款(c d)
。在我看来,它应该将所有剩余的(var val)
条款作为列表((c d) (e f))
。无论如何,我需要它这样做。
任何建议表示赞赏。
令我感到困惑的是,exprs将匹配一个表达式列表,所以我想不出任何理由为什么条款也不会这样做。
没有找到相关结果
已邀请:
1 个回复
樊熄忙暖
,因为你想匹配列表的其余部分,而不仅仅是一个元素。出于同样的原因,
部分需要为
。我相信还有其他语法专门用于匹配列表,但使用
很简单,并且匹配列表在内部实现的方式。