如何在Racket中检查类型



我定义了一个函数

(define 1-9 (list->set (range 1 10)))

我想看看1-9是否真的是一个集合。如何获取1-9的类型?

我试着用谷歌搜索球拍检查类型,但找不到任何有用的信息。

#lang racket是动态类型化的。实际上,这意味着你通常不(不应该(关心某个值的"类型"。

相反(正如Alex所指出的(,您给list?这样的"谓词"函数一个值。如果谓词返回true,那么您可以继续使用该值执行list-y操作——将该值赋予期望list的函数。

这比使用像(typeof value)这样的返回像List这样的魔术符号的东西要有用和可靠得多。毕竟,你关心的是你能用这个值做什么。谓词告诉你这一点。谓词允许以多种方式使用值(例如,作为列表和集合,两者都可以(。


p.s.这与版本号(如语义版本控制(如此愚蠢的原因类似。给定一些已安装的库,您真正关心的是它是否提供了某些功能和行为。如果你想询问实际安装的库,你是否提供了函数X——而不是使用一些幻数和外部信息来猜测。


p.p.s.如果您想序列化值(将它们写入和读取到文件中(,该怎么办?您确实需要选择一种方式来表示每个值。在Racket中,一种方法是使用原始值的打印表示,以及其他值的预制结构,然后使用writeread。还有CCD_ 11。在任何情况下,序列化值都是一件相对罕见的事情

最新更新