おそらく、Scheme でリストがどのように機能するかを混乱させているのではないでしょうか。この list:'(A(2 3) B(2 3) C(2 3))
は、この list: とまったく同じです'(A (2 3) B (2 3) C (2 3))
。つまり、6 要素のリストです。symbol-and-numbers の組み合わせを 1 つの要素として扱いたい場合は、それらを 1 つのリストにまとめます。'((A 2 3) (B 2 3) (C 2 3))
補足として、set-list
手順の記述方法は慣用的ではありません。特にappend
、リストを作成するときに先頭に要素を配置するのに使用するのは最善の方法ではありません。そのために使用cons
してください。これは、プロシージャを記述するためのより良い方法です。
(define (set-list a val)
(if (null? a)
'()
(cons val
(set-list (cdr a) val))))
さて、上記の私のアドバイスに従って、それがどのように機能するかは次のとおりです。
(set-list '((A 2 3) (B 2 3) (C 2 3)) -1)
=> '(-1 -1 -1)
アップデート:
さて、リストの仕組みに誤解がなく、リスト内のすべてのサブリストを特定の値に置き換えたいだけなら、これでうまくいきます:
(define (set-list a val)
(build-list (length (filter (negate list?) a))
(lambda (x) val)))