set - 为什么我在 Scheme 中的 adjoin-set 过程会返回错误?

标签 set syntax-error scheme lisp anonymous-function

我正在尝试制定一个程序,将一个数字连接到一组从小到大排序的数字。在这个集合中,没有重复项,所以我尝试通过检查要连接的数字是否已经等于集合的 car 来递归解决这个问题,如果为真则返回集合返回,如果号码大于集合的car,则用号码和集合的cdr再次执行该过程。如果该集合为空,则它会将数字与集合相邻,因为我们知道该数字不等于集合中的任何其他数字。

这是我写的代码:

(define (adjoin-set x set)
  (if (null? set)
        (cons x set)
        (let (x1 (car set))
          (cond ((= x x1) set)
                ((> x x1)(adjoin-set x (cdr set)))
                (else (cons x set))))))               

我在一组赔率上测试了它:(define odds '(1 3 5)) (adjoin-set 7 odds)the interpreter返回以下内容:错误:让:需要一对绑定(bind):得到 x1 []。任何人都可以解释为什么会被退回以及如何解决它吗?

最佳答案

let 表达式的语法不正确,缺少几个 ()。应该是这样的:

(define (adjoin-set x set)
  (if (null? set)
      (cons x set)
      (let ((x1 (car set)))
        (cond ((= x x1) set)
              ((> x x1) (adjoin-set x (cdr set)))
              (else (cons x set))))))

您可以在 let 声明中定义多个变量/值对,最外层的括号用于将它们组合在一起。

关于set - 为什么我在 Scheme 中的 adjoin-set 过程会返回错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55799864/

相关文章:

lisp - Scheme中 `define`的返回值是多少?

scala - Scala中的Seq和Set有什么区别

javascript - 未捕获的语法错误 : Unexpected identifier in JavaScript class at Function declaration

C++:cout 语句使我的程序失控?

clojure - 在Clojure中消除尾部调用?

list - Scheme中的递归和返回列表

python - 理解 - 从字典字段中列出

algorithm - 在集合的分区上最大化 AND 和 XOR 的 bool 函数

java - 是否有一个忽略 .equals 的 java Set 集合

haskell - 如何修复我的 Haskell 条件语句?