Scheme List Manipulation(Recursion)

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

   (if (null? (cdr x)) 
      ('()))
   (cons ((car x) (all-but-last(cdr x)))
)))
对r5rs方案语法有所了解的人会有所帮助。谢谢!     
已邀请:
使用DrRacket和语言R5RS,这适用:
(define all-but-last
  (lambda (x)
   (if (null? x)
     '()
     (if (null? (cdr x)) 
       '()
       (cons (car x) (all-but-last(cdr x)))))))
    
如果删除
'()
周围的额外括号和
cons
的参数,代码将起作用(对于非空输入列表)。     
替代解决方案:
(define (all-but-last xs)
  (reverse 
    (rest
      (reverse xs))))
    
看看这个问题的答案: 删除列表的最后一个元素(方案) 另外,我打算将这个标记为“作业”。如果不是,请告诉我,我会将其删除。     
如果你将'()传递给你的函数,我想你应该给出错误信息而不是返回'()     

要回复问题请先登录注册