如何在 Racket 中检查类型?

use*_*628 8 types racket

我定义了一个函数

(define 1-9 (list->set (range 1 10)))
Run Code Online (Sandbox Code Playgroud)

我想看看1-9是不是真的一套。我怎样才能得到类型1-9

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

Gre*_*ott 5

#lang racket是动态类型的。实际上,这意味着您通常不(不应该)关心某个值的“The”“Type”。

相反(正如亚历克斯指出的那样),您为“谓词”函数(如list?. 如果谓词返回 true,那么您可以继续list使用该值执行-y 操作 - 将值提供给期望 的函数list

这比(typeof value)返回像List. 毕竟,你关心的是你可以用价值什么。一个谓词告诉你。并且谓词允许以多种方式使用的值(例如作为列表和作为集合,两者)。


ps 这类似于为什么版本号(如语义版本控制)如此愚蠢。给定一些已安装的库,您真正关心的是,它是否提供某些功能和行为。你要问实际安装的库,你提供函数X - 不是用一些幻数和外部信息来猜测。


pps 如果您想序列化值(将它们写入和读取到文件)怎么办?您确实需要选择一种方式来表示每个值。在 Racket 中,一种方法是使用原始值的打印表示,以及其他类似预制结构的东西——然后使用writeread。还有racket/serialize。无论如何,序列化值是一件相对罕见的事情。

  • 我想检查开发类型的情况怎么样?例如,我收到此错误:“cadr:预期违反合同:(cons / c任何/c对?)给出:'A2”现在我认为'A2可以用“符号?”检查 但如果我不知道怎么办? (4认同)