Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme let*作为嵌套的一元let_Scheme_Racket_Let_Rewriting - Fatal编程技术网

Scheme let*作为嵌套的一元let

Scheme let*作为嵌套的一元let,scheme,racket,let,rewriting,Scheme,Racket,Let,Rewriting,作为练习,我试图将表示let*源代码的字符串重写为嵌套的一元let。以下是我最大的努力: (define let*→nested-unary-lets (match-lambda (`(let* (()) ,<exprs>) `(let () ,<exprs>)) (`(let* ((,<var> ,<val>)) ,<exprs>) `(let ((,<var> ,<val>)) (

作为练习,我试图将表示
let*
源代码的字符串重写为嵌套的一元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*→嵌套一元let
(匹配lambda
(`(let*(()),)
`(让(),)
(`(let*(,),)
`(let(,)(let(),))
(`(let*(,),),)
`例如:让*→嵌套的一元let'(let*(,@),))、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
我目前遇到的问题是模式:

`(let* ((,<var> ,<val>) ,<clauses>) ,<exprs>)
`(让*(,),),)
与以下字符串不匹配:

'(let* ((a b) (c d) (e f)) <expressions>)
(让*((a b)(c d)(e f))) 术语子句仅与第二个子句相匹配
(cd)
。在我看来,它应该将所有剩余的
(var val)
子句作为一个列表
((cd)(ef))
。无论如何,我需要它这样做

任何建议都将不胜感激


让我困惑的是,expr将匹配表达式列表,因此我想不出子句不匹配的任何原因。

您需要
因为您希望匹配列表的其余部分,而不仅仅是单个元素。
零件需要是
出于同样的原因。我相信还有其他专门用于匹配列表的语法,但是使用
非常简单,并且与列表的内部实现方式相匹配。

谢谢。“.”成功了。奇怪的是,如果没有它,它可以正常工作——这让我很困惑。@Schemer:这可能只是因为您正在尝试一个
let*
,在主体中有一个表达式。在
之前尝试
(让*((a(+23))(b(*6 7)))(显示(-b a))(换行符))
而不使用
,看看这是否有效。这是对的后续问题。