私はintersectを使って可変関数を作成しようとしましたが、私は関数に交差を実装した方法をひどく混乱させていると思いますし、関数を修正する最良の方法についてはわかりません。交差変更オブジェクトを修正する
(define (intersect-mutable)
(let ((lst '()))
(let ((lst2 '()))
(define (insert x)
(set! lst (cons x lst)))
(define (intersect)
(define (helper lst lst2)
(define contains member)
(cond ((null? set) '())
((contains (car lst) lst2)
(cons (car lst) (intersect (cdr lst) lst)))
(else
(intersect (cdr lst) lst2))))
(helper lst lst2))
(lambda (function)
(cond ((eq? function 'intersect) intersect)
((eq? function 'insert) insert)
(else
'undefined))))))
再帰関数のためのテストケースは次のようになります。挿入のための
>(intersection '(2 4 7 10) '(2 9 0 10))
(2 10)
>(intersection '(1 4 10) '(83 1 48 2 4))
(1 4)
テストケース:
(define mut (intersect-mutable))
((mut 'insert) 'intersect)
((mut 'insert) 'mutable)
明確にするために、私は1つに2つの別々のリストに交差するようにしようとしていますリスト。私は挿入機能を追加しました。
入力と出力の例を示してください。また、「変更可能な機能」が何を意味するのかは不明です。 –
変更可能なデータ構造は、破壊的な関数とも呼ばれます。この関数は、変数を現在の状態に変更します。したがって、vが最初は0であった場合、3を加えると、vの値は3になります。次にvに3を加え、vの値は6になります。基本的に、vの新しい値はメモリに保存されます。ユーザーが後でアクセスすることができます。うまくいけば、これは理にかなっている。私は概念を説明するのに苦労します。 – Vicky
データ構造は関数なのですか? –