【发布时间】:2018-09-29 05:46:27
【问题描述】:
我正在学习 Scheme,来自 Haskell 背景,我遇到了一个非常令人惊讶的问题 - scheme 似乎没有自定义数据类型??? (即对象、结构等)。我知道有些实现有自己的自定义宏来实现结构,但 R6RS 本身似乎没有提供任何此类功能。
鉴于此,我有两个问题:
- 这是正确的吗?我是否缺少允许创建自定义数据类型的功能?
- 如果不是,方案程序员如何构建程序?
例如,任何试图返回多项数据的函数都需要某种封装数据的方式。使用哈希映射的最佳做法是什么?
(define (read-user-input)
(display "1. Add todo\n2. Delete todo\n3. Modify todo\n")
(let ((cmd-num (read)))
(if (equal? cmd-num "1") '(("command-number" . cmd-num) ("todo-text" . (read-todo)))
(if (equal? cmd-num "2") '(("command-number" . cmd-num) ("todo-id" . (read-todo-id)))
'(("command-number" . cmd-num) ("todo-id" . (read-todo-id)))))))
【问题讨论】:
-
是的,
record是方案名称。记录类型至少有五个 SRFI,9、57、76、99 和 136。 -
但他们大多只是使用列表,并编写自己的函数来构造它们。
-
@Barmar 哦,这很有趣......如果你详细说明它是如何工作的,我会接受这个答案
-
看起来你已经在这样做了。您的数据是一个正常的关联列表。 Scheme 具有用于处理它们的内置函数:gnu.org/software/mit-scheme/documentation/mit-scheme-ref/…
标签: data-structures functional-programming scheme lisp chicken-scheme