作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我定义了一个函数
(define 1-9 (list->set (range 1 10)))
1-9
真是一套。我如何获得
1-9
的类型?
最佳答案
#lang racket
是动态类型的。实际上,这意味着您通常不(不应该)关心某个值的“The”“Type”。
相反(正如亚历克斯指出的那样),你给“谓词”函数一个值,比如 list?
.如果谓词返回 true,那么您可以继续执行 list
-y 带有值的东西 -- 将值赋予期望 list
的函数.
这比拥有类似 (typeof value)
的东西有用和可靠得多。返回魔术符号,如 List
.毕竟,你关心的是你可以用值(value)做什么。一个谓词告诉你。并且谓词允许可以以多种方式使用的值(例如作为列表和作为集合,两者兼有)。
附言这类似于为什么版本号(如语义版本控制)如此愚蠢。给定一些已安装的库,您真正关心的是,它是否提供某些功能和行为。你要问实际安装的库,你提供函数X - 不是用一些魔数(Magic Number)和外部信息来猜测。
pps如果您想序列化值(将它们写入和读取到文件)怎么办?您确实需要选择一种方式来表示每个值。在 Racket 中,一种方法是使用原始值的打印表示,以及其他类似预制结构的东西——然后使用 write
和 read
.还有racket/serialize
.无论如何,序列化值是一件相对罕见的事情。
关于types - 如何在 Racket 中检查类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53292108/
我是一名优秀的程序员,十分优秀!