0

'( (1'()) (2 3) (3 4) (4 '()) ) という形式のリストがあり、それを更新したいと考えています。例えば。ここで、最初の値 int 2 を 2 番目の値 5 に置きます

そして結果はこのようになります

'( (1'()) (2 5) '(3 4) (4 '()) )

私はそのようなことを念頭に置いていますが、それを実装する方法がわかりません..また、使用するグローバルリストに結果を挿入したい

(定義 (更新 ls var1 var2)

(equal? (var1 (car (car ls))) ( ; リストに要素を追加 ) (update (cdr ls) var1 var2 )

4

2 に答える 2

0

仮定して:

  1. で始まるサブリストは 1 つだけ2です (置き換えたいもの)
  2. 入力はサブリストのリストです(コメントで指摘したように、引用符で囲まれたリストではありません)

…その後、簡単な解決策はmap、更新を適用して新しいリストを作成するために使用することです。

(define lst '((1 '()) (2 3) (3 4) (4 '())))

(map (lambda (e)
       (if (= (car e) 2) ; check if this is the pair we want to update
           (list 2 5)    ; if so, create a new modified sublist
           e))           ; else keep the sublist as it comes
     lst)

=> '((1 '()) (2 5) (3 4) (4 '()))
于 2013-11-04T03:24:36.497 に答える
0

オスカーの答えの問題は、リストをグローバル変数として使用する場合は、すべての関数呼び出しでそれを渡すか、set! を使用する必要があることです。まったく新しいリストを生成した後。

簡単なテーブルの実装はここにあります。http://mitpress.mit.edu/sicp/full-text/book/book-ZH-22.html#%_sec_3.3.3

于 2013-11-05T05:16:42.797 に答える