编辑:谢谢大家。我是这种语言的新手(两天前才开始使用它),所以这就是我不熟悉 conds 的原因。如果我有时间,我可能会重写它,但我只是想确保我的基本逻辑是正确的。再次感谢!
我的任务是创建一个尾递归函数,它从列表中删除第 n 个元素,1 <= n <= listlength,只有两个参数,列表 x 和元素 n。因此,(remove 1 '(abcd)) 将返回 (bcd)。我已经写了以下内容,并希望确信它确实是尾递归的。我唯一不清楚的是递归调用是否可以嵌套在 IF 语句中。
(define (remove n x)
; if n is 1, just return the cdr
(if (and (not (list? (car x))) (= n 1))
(cdr x)
; if the car is not a list, make it one, and call recursively
(if (not (list? (car x)))
(remove (- n 1) (cons (list (car x)) (cdr x)))
; if n !=1, insert the cadr into the list at the car.
; Else, append the list at the car with the cddr
(if (not(= n 1))
(remove (- n 1) (cons (append (car x) (list(cadr x))) (cddr x)))
(append (car x) (cddr x))))))