Recursion 在方案中向列表和返回列表添加元素
我试图定义一个函数,该函数接受字母列表,并返回删除最后一个元素的列表。我是scheme的新手,所以我不确定如果不在函数中创建变量是否可以实现这一点。 到目前为止,我从以下方面开始:Recursion 在方案中向列表和返回列表添加元素,recursion,scheme,racket,Recursion,Scheme,Racket,我试图定义一个函数,该函数接受字母列表,并返回删除最后一个元素的列表。我是scheme的新手,所以我不确定如果不在函数中创建变量是否可以实现这一点。 到目前为止,我从以下方面开始: define funct (lambda (x) (let (list '() ) (if ( < (length x) 2 ) list (append ( list (car x)) 定义函数(λ(x) (让(列出“()”) (如果(
define funct (lambda (x)
(let (list '() )
(if ( < (length x) 2 ) list (append ( list (car x))
定义函数(λ(x)
(让(列出“()”)
(如果(<(长度x)2)列表(附加(列表(车辆x))
我能像这样简单地执行递归调用吗:
(if ( < (length x) 2 ) list (append ( list (car x)) (set x (cdr x)) lambda (x))
(如果(<(长度x)2)列表(附加(列表(车辆x))(集合x(cdr x))lambda(x))
或者这是大错特错了?大错特错了,是的
理由如下:
(define funct
(lambda (lst)
(if (or (null? lst) (null? (cdr lst)))
'()
(cons (car lst) (funct (cdr lst))))))
测试:
> (funct '())
'()
> (funct '(a))
'()
> (funct '(a b))
'(a)
> (funct '(a b c))
'(a b)
> (funct '(a b c d))
'(a b c)
Scheme程序很少包含的两个词是
length
和set!
。学会在没有它们的情况下生活。