【问题标题】:let: bad syntax (missing binding pairs or body)let:语法错误(缺少绑定对或正文)
【发布时间】:2019-07-08 16:50:39
【问题描述】:

我想声明三个要对其进行操作的列表,但使用“定义”它们的值不会改变。所以我想我会使用“lat”,但它给了我一个错误。

(let ((A '0)
      (B '0)
      (C '0)
      )
  )

我希望有 3 个列表,但它给了我这个错误:

let: bad syntax (missing binding pairs or body) in: (let ((A (quote 0)) (B (quote 0)) (C (quote 0))))

【问题讨论】:

  • “不变”是什么意思?你如何尝试改变它们?
  • '0 不是一个列表。如果你想要一个空列表,写'()。 (我从您想要在这些列表上“执行操作”以使它们的值“改变”的感觉中感觉到,您已经通过命令式思考来找错树了。有 good bookslectures 免费提供.)

标签: scheme


【解决方案1】:
(let ((a 0) (b 0) (c 0))
  ;; a, b, c lives inside this let block
  (list a b c)) ;; a body of the let that makes a list (0 0 0)

;; a, b, c from the let block no longer exist 

Scheme 报告希望您将绑定用于某事。因此,在定义了 let 的绑定之后,预计其中至少有一个表达式可以执行某些操作。 let 只是语法糖:

;; anonymous lambda call
((lambda (a b c)
   (list a b c))  ;; body of the lambda that makes list (0 0 0)
 0 ; a
 0 ; b
 0); c

现在想象一下这应该做什么:

;; anonymous lambda call
((lambda (a b c)
  ;; no body that does anything 
  )
 0 ; a
 0 ; b
 0); c

【讨论】:

    【解决方案2】:

    编写没有正文的 let 与定义没有正文的 lambda 函数相同。

    (let ((A '0)
          (B '0)
          (C '0)
          )
      )
    

    和写一样

    (lambda(a b c) ) 0 0 0) ;; here it is not allowed to define function with no statement inside
    

    ('0 对自身求值).

    【讨论】:

      【解决方案3】:

      你做对了,但缺少代码

      (let ((A '0)
            (B '0)
            (C '0)
            )
        you need code here
        )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-28
        相关资源
        最近更新 更多