2016-06-20 14 views
2

空のリストに値を再帰的に追加するスキームで関数を作成しようとしています。Scheme - リストに再帰的に値を追加する

私は空のリストに定義されている:

(define empty '()) 

をそして、私はリストに値を追加する必要がある関数定義されています:私はスキーム(recapp空5)に入力すると

(define (recapp empt x) 
    (if (= 0 x) 
     empt 
     (begin 
     (append empt x) 
     (recapp empt (- x 1))))) 

をI私が(1 2 3 4 5)を取得したい場合でも空のリストを取得します。何が問題ですか?

ありがとうございます。

答えて

1

問題は(append empt x)はemptの値を変更しないということです。したがって、empt(値 '())をrecappX(元の引数値)回まで渡すだけです。

(define (recapp empt x) 
    (if (= 0 x) 
     empt 
     (recapp (cons x empt) (- x 1)))) 

あなたが望むものに近いです。同様の機能を有するプリミティブiotaにも注意してください。

+2

「iota」は実際にはプリミティブではありません。これはSRFI 1によって提供されています。たとえば、ラケットは代わりに 'range'を提供します(' iota'とは異なる引数の順序で)。 –

+1

ありがとう!!残念ながら私はまだあなたの答えを上に投票できません:/ – Leero11

関連する問題