Schemeに、x
という要素の位置を既存のリストの位置に追加するプロシージャを実装しようとしています。これは私が思いついたものです:リストに要素を追加する
(define empty-list '())
(define (add i x L)
(cond ((null? L) (set! L (list x)))
((= i 0)(set! L (cons x L)))
(else (set! L (cons (car L)
(add (- i 1) x (cdr L))))
)))
(add 0 1 empty-list) -> returns()
(add 1 2 empty-list) -> returns()
(add 2 3 empty-list) -> returns()
コードは既存のリストを更新しません。しかし、私がちょうど実行した場合 (set! empty-list (list 1))
または (set! empty-list (cons 2 empty-list))
うまく動作します。 私は間違っていることを理解するのに苦労しています。
パラメータに値を割り当てることは、慣れ親しんでいる他の言語とまったく同じように機能します。つまり、関数の外では効果がありません。入力を変更する意図があることは絶対に確信していますか? Schemeプログラムで行うことは非常にまれです。 – molbdnilo