Во-первых, пожалуйста делайте научитесь отступать Лисп правильно.
Во-вторых, ваша проблема в том, что вы решили использовать кучу побочных эффектов для созданиясписок людей в Схеме (и, как следствие, вы споткнулись о один из лучших моментов построения списка).
В этой ситуации я бы написал:
(define persons
(map (lambda (n)
(let ((newp (make-person)))
(send newp setage (- 50 n))
newp))
(iota 10)))
(define (firstpersonage)
(send (car persons) getage))
is, определите person
как список из десяти человек в возрасте от 50 до 41 года. Делая это таким образом, вы исключаете множество ошибок, включая ту, которую вы только что укусили.
Если вы абсолютно точно не можете расстаться со своими set!
s, похоже, ошибка в строке
(set! persons (cons persons newp))
cons
не добавляет два списка, он добавляет новый элемент в начало списка.Например,
(cons 3 (list 2 1)) => (3 2 1)
Если вы сделаете это наоборот, вы не получите то, что ищете
(cons (list 1 2) 3) => ((1 2) . 3)