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