首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >博士,R5RS和SRFI

博士,R5RS和SRFI
EN

Stack Overflow用户
提问于 2012-07-04 19:45:46
回答 2查看 1.5K关注 0票数 1

每当我尝试使用srfi/1函数,如、折叠、,减少,在drracket r5rs语言中,我会得到一个空列表吗?错误。经过一些研究,我发现,这是因为函数需要和不变的列表,但得到一个可变的列表。如何在r5rs中创建不可变列表,还是这个srfi/1没有考虑到r5rs?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-06 13:48:55

这基本上是重复约翰的话,但它确实值得一个完整的回答地位。(约翰,如果你逐字复制这个答案,我很乐意删除这个.)

关于Racket的R5RS语言的问题是,它非常严格地坚持只使用R5RS语言,因此除了这个语言之外什么都没有。(SRFI也可以为R5RS可变对实现,但从来没有人想出经过修改的代码。)

无论如何,这里的底线是,R5RS基本上只有在一些罕见的情况下才有用,在这种情况下,您只想给自己带来使用基本的r5rs语言的痛苦--这意味着您基本上不能做很多有用的事情。所以,特别是如果你想对语言有一种感觉,你可能会想玩各种超越狭窄的r5rs世界的东西--为此,你应该使用#lang racket

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

票数 4
EN

Stack Overflow用户

发布于 2012-07-04 21:09:50

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

由于R5RS中的cons单元使用可变的cons单元格,所以不能使用内置的srfi/1和R5RS语言在DrRacket中。

然而,这是一个小问题。下载http://srfi.schemers.org/srfi-1/srfi-1-reference.scm并将其保存在有代码的目录中。

打开它并插入第一行:

代码语言:javascript
复制
(define (check-arg . more) #t)

然后在您自己的代码中,添加以下一行:

代码语言:javascript
复制
(load "srfi-1-reference.scm")

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

现在运行以下程序:

代码语言:javascript
复制
(load "srfi-1-reference.scm")
(fold + 0 '(1 2 3))

按预期生产6台。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11334697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档