Return 列表Scheme中的第一个和最后一个元素
Return the first and last element in the list Scheme
非常简单的问题。我最初的方法是定义另一个过程来在 first-last 中找到 lst 的最后一个元素。找到最后一个元素后,我将它附加到 lst (car lst) 的第一个元素。
这就是 append 的工作原理。
(附加列表 1 列表 2)
例如,(附加'(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
这是我关于堆栈的第一个问题,所以如果问题没有以正确的方式呈现,我很抱歉。
append
仅适用于加入 两个或多个列表。不过,在这里,您不是加入现有列表,而是从两个元素构建列表。为此,使用 list
:
(list (car lst) (last lst))
如果可以使用 match
,一个简洁的解决方案是可能的:
(define first-last
(lambda (x)
(match x
((first rest ... last)
(list first last))
((only) (list only only))
(_ #f))))
当然,您可以 return 在 catch-all 子句中使用 #f
以外的内容。
非常简单的问题。我最初的方法是定义另一个过程来在 first-last 中找到 lst 的最后一个元素。找到最后一个元素后,我将它附加到 lst (car lst) 的第一个元素。 这就是 append 的工作原理。 (附加列表 1 列表 2) 例如,(附加'(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
这是我关于堆栈的第一个问题,所以如果问题没有以正确的方式呈现,我很抱歉。
append
仅适用于加入 两个或多个列表。不过,在这里,您不是加入现有列表,而是从两个元素构建列表。为此,使用 list
:
(list (car lst) (last lst))
如果可以使用 match
,一个简洁的解决方案是可能的:
(define first-last
(lambda (x)
(match x
((first rest ... last)
(list first last))
((only) (list only only))
(_ #f))))
当然,您可以 return 在 catch-all 子句中使用 #f
以外的内容。