为什么我的 Scheme return 中的 adjoin-set 过程出错了?
Why does my adjoin-set procedure in Scheme return an error?
我正在尝试制定一个程序,将一个数字连接到一组从最小到最大排序的数字。在这个集合中,没有重复项,所以我试图递归地解决这个问题,通过检查要连接的数字是否已经等于集合的 car
并且如果返回 true 则返回集合,并且如果数字大于集合的 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 返回了以下结果:Error: let: need a pair for bindings: got 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
声明中定义多个 variable/value 对,最外层的括号用于将它们组合在一起。
我正在尝试制定一个程序,将一个数字连接到一组从最小到最大排序的数字。在这个集合中,没有重复项,所以我试图递归地解决这个问题,通过检查要连接的数字是否已经等于集合的 car
并且如果返回 true 则返回集合,并且如果数字大于集合的 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 返回了以下结果:Error: let: need a pair for bindings: got 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
声明中定义多个 variable/value 对,最外层的括号用于将它们组合在一起。