迭代球拍中的列表

时间:2014-09-13 18:28:45

标签: racket

(define list45 (map number->string(build-list 1000 values)))
list45
(first (list45))
(rest (list45))

错误:     申请:不是程序;      期望一个可以应用于参数的程序

我试图遍历我转换为字符串的列表。为此,我尝试使用first和rest函数来查看列表中的所有内容。为什么我会因此而出错?

由于

1 个答案:

答案 0 :(得分:2)

只需将括号放在列表中:

(first list45)
=> "0"

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

在Scheme中,当您在()之间包围某些内容时,解释器会将其评估为不带参数的函数应用程序。鉴于list45不是函数,引发了“application:not a procedure”错误。在Racket中很容易迭代列表:

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

但是如果由于某种原因你想使用firstrest来遍历列表,这是一种可能性,使用显式递归:

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

(iterate list45)