編集:みんなに感謝します。私はこの言語に慣れていないので(2日前に使い始めたばかりです)、そのため、condsに慣れていません。時間があれば書き直すかもしれませんが、基本的なロジックが正しいことを確認したかっただけです。再度、感謝します!
私の割り当ては、リストxと要素nの2つのパラメーターのみを使用して、リストからn番目の要素1 <= n<=listlengthを削除する末尾再帰関数を作成することです。したがって、(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))))))