Scheme Racket博士、R5RS和SRFI

Scheme Racket博士、R5RS和SRFI,scheme,racket,Scheme,Racket,每当我尝试在drracket r5rs语言中使用srfi/1函数(如fold和reduce)时,我会得到一个空列表?错误经过一些研究,我发现这是因为函数需要一个不可变的列表,但得到了一个可变的列表。如何在r5rs中创建不可变列表,或者此srfi/1的设计没有考虑r5rs?由于语言机架使用不可变cons单元,因此系统附带的srfi/1实现也使用不可变cons单元 由于R5RS中的cons单元使用可变cons单元,因此不能将内置srfi/1与DrRacket中的R5RS语言一起使用 然而,这是一个小

每当我尝试在drracket r5rs语言中使用srfi/1函数(如fold和reduce)时,我会得到一个空列表?错误经过一些研究,我发现这是因为函数需要一个不可变的列表,但得到了一个可变的列表。如何在r5rs中创建不可变列表,或者此srfi/1的设计没有考虑r5rs?

由于语言机架使用不可变cons单元,因此系统附带的srfi/1实现也使用不可变cons单元

由于R5RS中的cons单元使用可变cons单元,因此不能将内置srfi/1与DrRacket中的R5RS语言一起使用

然而,这是一个小问题。 下载并保存在代码所在的目录中

打开它并在第一行插入:

(define (check-arg . more) #t)
然后在您自己的代码中添加以下行:

(load "srfi-1-reference.scm")
现在srfi/1重新定义了map和其他一些。 重新定义的内置操作通常只执行 在意外情况下,DrRacket中的默认设置 就是抛出一个错误。因此,点击R5RS语言 在DrRacket的左下角。选择语言。。。。 然后单击“显示详细信息”按钮。删除勾号 通过不允许重新定义初始绑定

现在运行以下程序:

(load "srfi-1-reference.scm")
(fold + 0 '(1 2 3))

并按预期生成6。

由于语言racket使用不可变cons单元格,因此系统附带的srfi/1实现也使用不可变cons单元格

由于R5RS中的cons单元使用可变cons单元,因此不能将内置srfi/1与DrRacket中的R5RS语言一起使用

然而,这是一个小问题。 下载并保存在代码所在的目录中

打开它并在第一行插入:

(define (check-arg . more) #t)
然后在您自己的代码中添加以下行:

(load "srfi-1-reference.scm")
现在srfi/1重新定义了map和其他一些。 重新定义的内置操作通常只执行 在意外情况下,DrRacket中的默认设置 就是抛出一个错误。因此,点击R5RS语言 在DrRacket的左下角。选择语言。。。。 然后单击“显示详细信息”按钮。删除勾号 通过不允许重新定义初始绑定

现在运行以下程序:

(load "srfi-1-reference.scm")
(fold + 0 '(1 2 3))

这基本上是在重复约翰所说的,但它确实值得一个完整的答案。约翰,如果你逐字复制这个答案,我很乐意删除这个

Racket的R5RS语言非常严格地只使用R5RS语言,因此除了R5RS语言之外没有其他语言。SRFI也可以为R5RS可变对实现,但从来没有人提出过修改过的代码

在任何情况下,这里的底线是,R5RS基本上只在少数情况下有用,在这些情况下,你只想用基本的R5RS语言给自己带来写作的痛苦,这意味着你基本上不能做很多有用的事情。因此,特别是如果你想对语言有一种感觉,你可能会想玩各种各样的东西,超越狭窄的R5R世界——为此,你应该使用lang racket


在摸索该语言方面也更好,您甚至可以将同样的经验应用到其他Scheme实现中,记住它们都有自己的扩展。如果你使用有限的r5rs语言,你可能会体验到这种有限语言带来的挫折感,这很容易压倒你在其他方面可能有的任何积极体验。

这基本上是在重复John所说的,但绝对值得一个完整的回答状态。约翰,如果你逐字复制这个答案,我很乐意删除这个

Racket的R5RS语言非常严格地只使用R5RS语言,因此除了R5RS语言之外没有其他语言。SRFI也可以为R5RS可变对实现,但从来没有人提出过修改过的代码

在任何情况下,这里的底线是,R5RS基本上只在少数情况下有用,在这些情况下,你只想用基本的R5RS语言给自己带来写作的痛苦,这意味着你基本上不能做很多有用的事情。因此,特别是如果你想对语言有一种感觉,你可能会想玩各种各样的东西,超越狭窄的R5R世界——为此,你应该使用lang racket


在摸索该语言方面也更好,您甚至可以将同样的经验应用到其他Scheme实现中,记住它们都有自己的扩展。如果您使用有限的r5rs语言,您可能会体验到这种有限语言带来的挫折感,这很容易压倒您在其他方面可能有的任何积极体验。

我认为我的评论不值得完全回答,但我鼓励您尝试常规语言,除非你有一些特别的理由使用R5R,而不仅仅是简单地坚持语言标准
d、 我使用它纯粹是为了好玩,所以我决定坚持使用R5R,这样我就可以在脑海中感觉到我对语言的整个概念都很熟悉。我认为我的评论不值得完全回答,但我鼓励你尝试常规的lang racket语言,除非你有一些特别的理由使用R5R,而不仅仅是为了坚持语言标准。我使用R5R纯粹是为了好玩,所以我决定坚持使用R5R,这样我就可以在脑海中感觉到我对语言的整个概念都很熟悉。