0
(define (getFirstFew lst)
  (cond
  ((= (read) 0) '()) ;returns nothing
  (else(cons (car lst)(getFirstFew (cdr lst)(- (read) 1))))))

それが上記の私のコードです。だから私はリストから最初の x 要素を取得するプロシージャを作成しようとしています (ユーザーは x が何になるかを選択できます)。たとえば、(getFirstFew '(1 6 2 4 5)) で 4 を入力すると、'(1 6 2 4) になります。

これに関する私の現在の問題は、 read を2回使用すると、2回呼び出されてプログラムが壊れることです。ユーザーが入力したものを変数に格納し、プログラム全体でその変数を使用する方法はありますか? または、この問題に対する別の解決策はありますか?

4

1 に答える 1

1

一度readだけ実行し、後で参照できるように値を保存する必要があることに注意してください。通常、これには a を使用しますが、リストを反復処理し、各反復でデクリメントする必要があることを考えると、namedの方が適切です。これを試して:letxlet

(define (getFirstFew lst)
  (let loop ((lst lst) (x (read)))
    (if (= x 0)
        '()
        (cons (car lst)
              (loop (cdr lst) (- x 1))))))

期待どおりに動作します:

(getFirstFew '(1 6 2 4 5))
> 4
=> '(1 6 2 4)
于 2015-11-14T00:31:23.673 に答える