Моя схема немного ржавая. И у меня под рукой только д-р-интерпретатор ...
Вам нужно использовать свой список и возвращать только первый элемент каждого подсписка.
Чтобы создать список, вы должны использовать директиву cons , и вам не нужно выводить ее, вам нужно вернуть ее как результат функции (но вы уже должны это знать).
Если вам нужно распечатать результат, вы должны отделить вычисление от вывода и решить проблемы печати на втором шаге.
Для построения списка у вас есть несколько конструкций, наиболее базовыми из которых являются минусы, он берет общий элемент (также список) и добавляет его к списку (также нулевому)
(cons 1) => error: cons need two parameters
(cons 1 null) => (list 1)
(cons 1 2) => error: need a value (first parameter) and a list (the second one)
(cons 1 (cons 2 null) => (list 1 2)
Теперь к вашей домашней работе. Обычно я не публикую код домашней работы, но на этот раз я думаю, что вы просто намекнете на решение, поэтому есть возможный
(define (car-list alist)
(cond
((null? alist) null)
(else (cons (car(car alist)) (car-list (cdr alist))))
)
)
; tail recursion version usage: (car-acc-list alist null)
(define (car-acc-list alist acc)
(cond
((null? alist) acc)
(else (car-acc-list (cdr alist) (cons (car(car alist)) acc)))
)
)
Я использовал cond вместо , если , потому что я думаю, что это позволяет лучше форматировать ваш код.
Его структура проста: список предложений, с условием испытания (или другим) в качестве машины и действием, которое необходимо выполнить, если условие удовлетворяется как cdr.
Если действие разрешается в значение ((null? Alist) null ), функция возвращается с этим значением в качестве возвращаемого значения. Если запускается рекурсия, то функция возвращается после завершения рекурсии.
Существует две версии решения, вы должны использовать степпер / отладчик, чтобы исследовать их различия.
Кстати, я использовал drscheme для проверки кода, это замечательный кусок бесплатного (lgpl) программного обеспечения. Незначительные отличия от других схемных сред, но код должен быть очень простым, и поэтому он должен работать везде без проблем.