0

このコードの目的は、リスト X の最初の N 部分を削除して返すことです

{define (grab x n) 
   (cond
     [(< (len x) n) x]  
     [(> n 1)((car x) (grab(cdr x) (- n 1)))]
     [(= n 1)(car x)]
 )}

現在、上記のエラーを返すだけです

4

1 に答える 1

0

ソリューションにはいくつかのエラーがあります。

  • 2 番目の条件では、現在の値を忘れています - 覚えておいてください、私たちは答えとしてリストconsを再帰的に構築しています。cons
  • 2 番目と 3 番目の条件では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)
于 2013-10-03T02:15:31.960 に答える