Racket:模块中的未绑定标识符:vector?

时间:2014-02-26 21:16:30

标签: racket

我正在尝试使用#lang plai-typed在球拍中运行程序,但我一直收到“未绑定标识符”错误

(define (get-fundef [n : symbol] [fds : (vector FunDefC)]) : FunDefC
  (cond [(empty? fds)
         (error 'get-fundef "reference to undefined function")]
        [(vector? fds)
         (cond [(equal? n (fdC-name (vector-ref fds 0))) (vector-ref fds 0)]
               [else (get-fundef n (vector-drop fds 1))])]))

当我使用'listof'而不是'vector'作为输入运行时,调整为列表类型,它可以工作。我得到了矢量:

模块中的

'未绑定标识符:vector?'

帮助?

1 个答案:

答案 0 :(得分:1)

#lang plai-typed没有vector?功能,原因与它没有list?symbol?number?功能的原因相同:你不需要检查一个值的类型;类型注释告诉你。

如果您想检查矢量是否为空,可以使用(= 0 (vector-length fds))(< 0 (vector-length fds))

但你为什么要使用矢量?列表往往更方便:

  • 列表有更多实用功能;特别是filter在这里会有所帮助。
  • 由于没有vector-dropvector-rest函数,因此向量不太方便重复。如果你真的想迭代一个向量,你可能需要使用一个索引。
  • 向量是可变的,除非你真的需要,否则你不需要它。