问题标签 [r5rs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
649 浏览

racket - R5RS 方案中定义语法的可移植加载/包含?

我正在尝试编写适用于 DrRacket/plt-r5rs 和 Gambit/gsi 的东西。

我遇到的问题是(load "foo.scm")在 Gambit 中不加载define-syntax-blocks。在 Gambit 中使用(include "foo.scm")有效,但在 DrRacket 中当然会导致语法错误。

有什么办法可以解决这个问题,以便我可以编写可移植的 R5RS 代码?

我尝试过的事情:

  • 重新定义(include "foo.scm")(load "foo.scm")反之亦然。问题:在 Gambit 中重新定义宏是非法的。
  • 将所述重新定义包装在(if gambit ...). 问题:在 if 中放置定义是非法的(除非在另一个定义中)。
  • 将带有文件名的字符串传递给库文件中的包含。问题:Gambit 中的包含似乎发生在解释开始之前。
0 投票
1 回答
78 浏览

scheme - 将值定义为变量

如何将变量的值定义为变量名?例如我定义xnewname

然后我想定义名称为 的新变量x

我想要类似的东西

如果我打电话newname,我会得到'asd

可能吗?

0 投票
1 回答
90 浏览

scheme - 在方案中动态更改文字

我想编写一个采用文字的方法,可以说

end 返回类似这样的东西

所以,在那之后,如果我调用eval,scheme 将调用my带有参数的定义方法turn

我确实设法返回了另一个文字或字符串,但我没有设法做我想做的事。而且我没有找到任何关于这样的规范。

我想我必须以某种方式使用这样的东西:`(my,@param) 但它不起作用。

turn是一个符号

0 投票
1 回答
67 浏览

scheme - 解析列表以确定元素的类型

我正在尝试创建一个简单的递归函数,它接受一个列表,并根据列表的元素应用适当的函数。输入时:

所以我检查字符串是什么,然后相应地递归求解表达式。

这就是我现在所拥有的(只是为了加号):

这会产生错误(在输入“(myfunct '(plus 4 5))”时:

我无法查明错误的原因,我可以解释/修复吗?

编辑:

适用于:(myfunct '(plus (plus 4 5) 6) 但是,它仍然不适用于(myfunct '(plus (plus 4 5) (plus 2 3)))...。第二个参数不断返回为 void "()"。我画了递归树,我看不出那个错误的任何原因。有任何想法吗?

编辑 2:最终的工作答案,不是 100% 确定为什么这个工作而不是另一个,我最好的猜测是第二个参数是(在某些时候)((加 1 1))而不是(加 1 1),并且car 会返回错误的值。

0 投票
1 回答
566 浏览

functional-programming - 为什么没有集!函数修改 Scheme (r5rs) 中的原始列表?

我正在尝试编写一个函数,它接受一个列表(x)和一个数字(y)并删除列表中该数字的每次出现。前任。(deepdeleting '(0 0 1 2 0 3 0) 0) ===> '(1 2 3) 这是我目前所拥有的:

该代码有效,但我的问题是我希望它修改原始列表,而不仅仅是返回一个新列表。现在是这样的:

这对我来说似乎很奇怪,因为这两个套装车!和设置-cdr!功能似乎改变了输入列表,而设置!才不是...

任何见解将不胜感激!

0 投票
3 回答
176 浏览

recursion - 用键值对动态填充列表

我需要用对填写一个列表,例如:((x 10)(z 5))。

我目前的方法:

我意识到我还需要使用cons来保持列表的完整性,但第一个问题是当我执行类似(setID z 5)的操作时,返回的列表正是:((id val))。显然,它需要是((z 10))。有没有办法做这样的事情?

0 投票
1 回答
927 浏览

scheme - 如何在 Scheme Lisp 中将字符串转换为精确的数字?

例如,我有这个字符串:“6119726089.12814713”

如果我这样做(string->number "6119726089.12814713")- 使用 SISC 实现,结果是6.119726089128147e9- 在 Guile 实现中是6119726089.128147,但我想要一个确切的数字,比如:611972608912814713/100000000不损失精度。

我想要一个像 (string->exact) 这样的函数或类似的函数。

注意:请修复我的非母语英语并删除此消息。谢谢。

0 投票
2 回答
687 浏览

scheme - 如何在列表中最后一次出现元素之前获取列表?

我正在使用方案 R5RS。

给定一个包含多个条目的列表,我想返回该列表直到最后一次出现给定元素。

所以对于以下输入:

一个列表'("hi" "how" "are" "you")
关键字"you"

我想要以下输出:
列表'("hi" "how" "are")

我在方案 R5RS 中找不到具有此功能的功能,但也许我遗漏了一些东西。如果不存在这样的功能,我将如何实现它?

0 投票
1 回答
454 浏览

scheme - 方案 R5RS:定义 let 表达式

我想知道您将如何在 Scheme 中定义自己的 let 表达式(我对 scheme 很陌生)。我希望它看起来像(mylet id expr1 expr2),其中 id 绑定到 expr1 的值并在 expr2 中使用。我认为这将是这样的:

但这行不通。

当我尝试

我收到以下错误:

我究竟做错了什么?

0 投票
1 回答
129 浏览

math - 在 Scheme 中,我如何将一个精确的(有理的)数字分成被除数和除数?

我正在寻找的功能是这样的:

在 RnRS、SRFI 或任何自定义实现中是否有可能?