在我在大学的一门 CS 类(class)中,我们必须与 Racket 合作。我在大学之前的大部分编程时间都花在了 PHP 和 Java 以及 JavaScript 上。我知道 Racket 是一种函数式编程语言,就像 JavaScript 一样(编辑:当然不是。但我觉得我正在用它进行“函数式”编程,在看到答案后,这是一种错误的看法。)但我仍然不了解Racket(Scheme)的一些基本特性。
define-struct
?是函数吗?是一个类吗?我不知何故,因为我的 PHP 背景,一直认为它是一个类,但这不可能真的正确。 我的问题是我想了解语言的概念。我个人仍然认为它真的很奇怪,不像我以前使用过的任何东西,所以我的大脑试图将它与 JavaScript 进行比较,但它对我来说似乎如此不同。与 JavaScript 的平行/差异会大有帮助!
最佳答案
代码
(define x 3)
“全局”变量
x
将被设置为值 3。如果你现在写(set! x 4)
变量
x
将其值更改为 4。因此,在 Racket 中,您可以有一个“普通”变量,就像任何“普通”语言一样,如果你
想。事实是,在 Racket 中首选的编程风格是
功能性的,而不是程序性的。函数式编程风格
不鼓励变量突变。
define-struct
是一个 Racket 宏,用于定义“结构”模板”以及其他一些东西。例如,如果你
写:
(define-struct coord (x y))
您刚刚定义了一个“结构模板”(即名为
coord
的用户类型)有两个“插槽”:
x
和 y)
.之后,您现在可以:coord
,例如像这样:(make-coord 2 3)
(coord-x (make-coord 2 3)) ;will return 2
或者
(coord-y (make-coord 2 3)) ;will return 3
例如,
(coord? 3)
将返回 #f
,因为 3 不是 coord
类型结构,但
(coord? (make-coord 2 3)) ;will return #t
关于functional-programming - Racket 中的定义结构是什么,为什么没有变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10088098/