このコードの目的は、リスト X の最初の N 部分を削除して返すことです
{define (grab x n)
(cond
[(< (len x) n) x]
[(> n 1)((car x) (grab(cdr x) (- n 1)))]
[(= n 1)(car x)]
)}
現在、上記のエラーを返すだけです
このコードの目的は、リスト X の最初の N 部分を削除して返すことです
{define (grab x n)
(cond
[(< (len x) n) x]
[(> n 1)((car x) (grab(cdr x) (- n 1)))]
[(= n 1)(car x)]
)}
現在、上記のエラーを返すだけです
ソリューションにはいくつかのエラーがあります。
cons
を再帰的に構築しています。cons
0
、and ではなく andを使用する必要があり1
ます。それ以外の場合、プロシージャn
はゼロに等しいときに失敗しますn
ゼロに等しい場合、空のリストを返す必要があります-そうでない場合、出力リストは適切に構築されません上記のすべての修正を行うと、手順は機能します。
(define (grab x n)
(cond
[(< (len x) n) x]
[(> n 0) (cons (car x) (grab (cdr x) (- n 1)))]
[(= n 0) '()]))
補足として、インタープリターで利用できる場合は、基本的にtake
手順を実装しています(ただし、リストの長さよりも大きいtake
場合はエラーが発生します)。n
(take '(1 2 3 4 5) 3)
=> '(1 2 3)