非常直截了当的问题。我最初的方法是定义另一个程序来查找lst中的最后一个元素。找到最后一个元素后,我用lst(car lst)的第一个元素添加它。 这是追加工作的方式。 (追加list1 list2) 例如,(追加'(1 2 3)'(2 1 5)) - > (1 2 3 2 1 5) 我想知道问题是否只是我的语法,但我不确定。
(define (first-last lst)
(define (last lst)
(cond ((null? (cdr lst))(car lst))
(else (last (cdr lst)))))
(append(car lst)(last lst)))
错误发生在
中(append(car lst)(last lst)))
“mcar:合同违规
预计:mpair?
给出:1“
这是我关于堆栈的第一个问题,所以如果问题没有以正确的方式呈现,我很抱歉。
答案 0 :(得分:1)
append
is only for joining two or more lists. Here, though, you're not joining existing lists, but building a list from two elements. For that, use list
:
(list (car lst) (last lst))
答案 1 :(得分:1)
如果您可以使用match
,可以使用一个简洁的解决方案:
(define first-last
(lambda (x)
(match x
((first rest ... last)
(list first last))
((only) (list only only))
(_ #f))))
当然,你可以在catch-all子句中返回#f
以外的东西。