2016-11-06 5 views
0

Я пытаюсь создать список с заданным количеством строк. Итак, если я войду (make-row 3), это будет «(плющ» «плющ» «плющ»), и если я войду (make-row 2), это будет «(плющ» «плющ»).создать список с заданным числом строк

настоящее время у меня следующий код, но он не работает:

(define (make-row a) 
    (cond 
    ((= 0 a) '()) 
    (else 
    (list "ivory") 
    (make-row (- a 1))))) 

Можете ли вы сказать мне, как писать этот код или что я делаю не так я учусь, как программировать с типизированных/ракетка дома так что не имеют доступа к учителям или наставникам :(

ответ

1

Просто используйте один из встроенных процедур:

(define (make-row a) 
    (make-list a "ivory")) 

Но если вы хотите сделать это с нуля, используйте стандартный шаблон для построения выходного списка по результатам. Обратите внимание, что ваш код не будет работать из-за этого (list "ivory") в середине нигде - возвращается только последнее выражение условия, и в любом случае мы не рекурсивно создаем список. Попробуйте это:

(define (make-row a) 
    (cond ((= 0 a) '()) 
     (else (cons "ivory" (make-row (- a 1)))))) 

В любом случае, это работает, как ожидалось:

(make-row 3) 
=> '("ivory" "ivory" "ivory")