2014-09-13 4 views
0
(define list45 (map number->string(build-list 1000 values))) 
list45 
(first (list45)) 
(rest (list45)) 

ОШИБКА: применение: не процедура; Ожидаемая процедура, которая может быть применена к аргументамитерирование по списку в ракетке

Я пытаюсь выполнить итерацию по списку, который я преобразовал в строки. для этого я попытался использовать первую и остальные функции, чтобы просмотреть все в списке. Почему я получаю ошибки для этого?

Благодаря

+0

Дону 't поставить 'list45' между круглыми скобками. Это '(первый список45)'. – uselpa

ответ

2

Просто поместите скобки вокруг списка:

(first list45) 
=> "0" 

(rest list45) 
=> '("1" "2" … "998" "999") 

В схеме, когда вы окружаете что-то между (), интерпретатор вычисляет, что в качестве приложения функции без аргументов. Учитывая, что list45 не является функцией, возникает ошибка «приложение: не процедура». В Ракетка очень легко перебрать список:

(for ([e (in-list list45)]) 
    (displayln e)) 

Но если по какой-то причине вы хотите использовать first и rest для просмотра списка, вот одна возможность, с использованием явной рекурсии:

(define (iterate lst) 
    (unless (empty? lst) 
    (displayln (first lst)) 
    (iterate (rest lst)))) 

(iterate list45) 
Смежные вопросы