Може би обърквате как работят списъците в Scheme. Този списък: '(A(2 3) B(2 3) C(2 3))
е точно същият като този списък: '(A (2 3) B (2 3) C (2 3))
. Тоест, това е списък от шест елемента. Ако искате да третирате комбинацията от символ-и-числа като един елемент, опаковайте ги заедно в един списък: '((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)))
person
Óscar López
schedule
13.01.2013
A(2 3)
е единичен външен елемент с някои елементи вътре? (Това наистина са два външни елемента, символътA
и списъкът(2 3)
. Искате ли да пропуснете елементи, които самите са списъци?) - person Anton Kovalenko   schedule 13.01.2013