我是球拍和计划的新手,我正在尝试将列表的组合映射到加上功能,该功能采用列表的每个组合并将它们添加到一起,如下所示:
;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)))
答案 0 :(得分: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))
l
并不是一个好主意,乍一看我认为它是1
。最好称之为lst
(不是list
,请 - 这是一个内置程序)list
的来电添加到plus
plus
期望map
答案 1 :(得分: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