4

这里的基本问题是,当给定一个列表时,返回该列表中除最后一个元素之外的所有元素。例如,给定 (abcd) --> 返回 (abc)。我基本上有这个功能,它只是我遇到问题的 Scheme 语法,而且谷歌不是很友好。我不确定我是否正确使用了缺点。

(define all-but-last
  (lambda (x)

   (if (null? (cdr x)) 
      ('()))
   (cons ((car x) (all-but-last(cdr x)))
)))

熟悉 r5rs 方案语法的人会有所帮助。谢谢!

4

5 回答 5

3

如果删除'()和 参数周围的额外括号cons,则代码将起作用(对于非空输入列表)。

于 2011-03-10T19:45:01.593 回答
2

将 DrRacket 与 Language R5RS 一起使用,可以:

(define all-but-last
  (lambda (x)
   (if (null? x)
     '()
     (if (null? (cdr x)) 
       '()
       (cons (car x) (all-but-last(cdr x)))))))
于 2011-03-10T19:57:41.023 回答
1

另一种解决方案:

(define (all-but-last xs)
  (reverse 
    (rest
      (reverse xs))))
于 2012-05-18T09:42:51.830 回答
0

查看这个问题的答案:

删除列表的最后一个元素(方案)

另外,我将把这个标记为“家庭作业”。如果不是,请告诉我,我会删除它。

于 2011-03-10T20:22:52.497 回答
0

如果你将 '() 传递给你的函数,我认为你应该给出错误消息而不是 return '()

于 2014-08-11T17:06:22.967 回答