Возможно, вы не понимаете, как списки работают в 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