2017-03-04 61 views
-1

我是新来的球拍和方案,我试图在一起映射列表内搭列表中的每个组合的加funtion的组合,并添加喜欢如下:契约违背预期:数-Scheme

;The returned combinations 
((1 3) (2 3) (1 4) (2 4) (3 4) (1 5) (2 5) (3 5) (4 5) (1 6) (2 6) (3 6) (4 6) (5 6) (1 2) (2 2) (3 2) (4 2) (5 2) (6 2)) 

; expected results 
((2) (5) (5).....) 

不幸的是,我从下面的代码接收合同违反预期的错误:

;list of numbers 
(define l(list 1 2 3 4 5 6 2)) 

(define (plus l) 
(+(car l)(cdr l))) 

(map (plus(combinations l 2))) 

回答

2

你想(cadr l)。不(cdr l)在您的加功能:

(define (plus l) 
    (+ (car l) (cadr l))) 

哪里x(cons 1 (cons 2 '()))

(car x) => 1 
(cdr x) => (cons 2 '()) 
(cadr x) == (car (cdr x)) => 2 
+0

非常感谢您解决这个问题,并感谢您提供这样一个详细的答案。 – Racket

+0

@ coder-noob这真的能解决吗?您的代码中仍然存在一些错误。看到我的答案。 –

3

有一对夫妇的其他问题与您的代码,除了由错误@DanD指出。这应该可以解决他们:

(define lst (list 1 2 3 4 5 6 2)) 

(define (plus lst) 
    (list (+ (car lst) (cadr lst)))) 

(map plus (combinations lst 2)) 
  1. 这不是一个好主意,叫可变l,乍一看我还以为是一个1。更好地称之为lst(不是list,请 - 这是一个内置的程序)
  2. 在预期的输出中,是不是应该生成一个列表清单?到list添加调用plus
  3. 你不是在map期望它
  4. 不要通知缩进和格式化你的代码的正确方法的方式传递plus,它会帮助你找到的bug