gpt4 book ai didi

functional-programming - Racket 中的定义结构是什么,为什么没有变量?

转载 作者:行者123 更新时间:2023-12-04 00:15:58 25 4
gpt4 key购买 nike

在我在大学的一门 CS 类(class)中,我们必须与 Racket 合作。我在大学之前的大部分编程时间都花在了 PHP 和 Java 以及 JavaScript 上。我知道 Racket 是一种函数式编程语言,就像 JavaScript 一样(编辑:当然不是。但我觉得我正在用它进行“函数式”编程,在看到答案后,这是一种错误的看法。)但我仍然不了解Racket(Scheme)的一些基本特性。

  • 为什么没有“真实”变量?为什么在 Racket/Scheme 中一切都是函数?为什么语言设计者不包括他们?
  • 什么是define-struct ?是函数吗?是一个类吗?我不知何故,因为我的 PHP 背景,一直认为它是一个类,但这不可能真的正确。

  • 我的问题是我想了解语言的概念。我 个人仍然认为它真的很奇怪,不像我以前使用过的任何东西,所以我的大脑试图将它与 JavaScript 进行比较,但它对我来说似乎如此不同。与 JavaScript 的平行/差异会大有帮助!

    最佳答案

  • Racket 中有“真实”变量。例如,如果你写这个
    代码
    (define x 3)

    “全局”变量 x将被设置为值 3。如果你现在写
    (set! x 4)

    变量 x将其值更改为 4。因此,在 Racket 中,您可以
    有一个“普通”变量,就像任何“普通”语言一样,如果你
    想。事实是,在 Racket 中首选的编程风格是
    功能性的,而不是程序性的。函数式编程风格
    不鼓励变量突变。
  • define-struct是一个 Racket 宏,用于定义“结构”
    模板”以及其他一些东西。例如,如果你
    写:
    (define-struct coord (x y))

    您刚刚定义了一个“结构模板”(即名为 coord 的用户类型)
    有两个“插槽”:xy) .之后,您现在可以:
  • 创建结构的新“实例”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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com