我正在尝试使用 plai 类型在球拍中运行程序 #lang 但我不断收到"未绑定标识符"错误
(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"作为输入运行相同的操作时,调整为列表类型,它可以工作。使用矢量,我得到:
"模块中的未绑定标识符:矢量?"
帮助?
#lang plai-typed
没有vector?
函数,原因与它没有list?
、symbol?
或number?
函数相同:你不需要检查值的类型;类型注释告诉你。
如果你想检查向量是否为空,你可以使用 (= 0 (vector-length fds))
和 (< 0 (vector-length fds))
.
但是为什么要使用向量呢?列表往往更方便:
- 列表有更多的实用程序函数;特别是,
filter
在这里会有所帮助。 - 向量不太方便重复,因为没有
vector-drop
或vector-rest
函数。如果确实要遍历向量,则可能需要使用索引。 - 向量是可变的,除非你真的需要它,否则你不想要它。