Scheme 预期违反合同:数量?-方案

Scheme 预期违反合同:数量?-方案,scheme,racket,Scheme,Racket,我对racket和scheme是新手,我正在尝试将列表的组合映射到plus函数,该函数取列表的每个组合,并将它们添加到一起,如下所示: ;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)

我对racket和scheme是新手,我正在尝试将列表的组合映射到plus函数,该函数取列表的每个组合,并将它们添加到一起,如下所示:

;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)))
您需要
(cadr l)
。在plus功能中不使用
(cdr l)

(define (plus l) 
  (+ (car l) (cadr l)))
其中
x
(cons 1(cons 2'())


除了@DanD指出的错误之外,您的代码还有几个其他问题。这将解决这些问题:

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

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

(map plus (combinations lst 2))
  • 调用变量
    l
    不是一个好主意,乍一看我以为它是
    1
    。最好叫它
    lst
    (请不要叫
    list
    ,这是一个内置过程)
  • 在预期的输出中,您不是应该生成一个列表列表吗?将呼叫添加到
    列表
    plus
  • 您没有按照
    map
    所期望的方式传递
    plus
  • 请注意缩进和格式化代码的正确方法,它将帮助您查找错误

  • 谢谢你修复了它,谢谢你这么详细的回答。@coder noob真的修复了吗?代码中仍然存在一些bug。看看我的答案。
    (define lst (list 1 2 3 4 5 6 2))
    
    (define (plus lst) 
      (list (+ (car lst) (cadr lst))))
    
    (map plus (combinations lst 2))