问题标签 [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.
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 中的包含似乎发生在解释开始之前。
scheme - 将值定义为变量
如何将变量的值定义为变量名?例如我定义x
为newname
然后我想定义名称为 的新变量x
。
我想要类似的东西
如果我打电话newname
,我会得到'asd
可能吗?
scheme - 在方案中动态更改文字
我想编写一个采用文字的方法,可以说
end 返回类似这样的东西
所以,在那之后,如果我调用eval
,scheme 将调用my
带有参数的定义方法turn
。
我确实设法返回了另一个文字或字符串,但我没有设法做我想做的事。而且我没有找到任何关于这样的规范。
我想我必须以某种方式使用这样的东西:`(my,@param)
但它不起作用。
turn
是一个符号
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 会返回错误的值。
functional-programming - 为什么没有集!函数修改 Scheme (r5rs) 中的原始列表?
我正在尝试编写一个函数,它接受一个列表(x)和一个数字(y)并删除列表中该数字的每次出现。前任。(deepdeleting '(0 0 1 2 0 3 0) 0) ===> '(1 2 3) 这是我目前所拥有的:
该代码有效,但我的问题是我希望它修改原始列表,而不仅仅是返回一个新列表。现在是这样的:
这对我来说似乎很奇怪,因为这两个套装车!和设置-cdr!功能似乎改变了输入列表,而设置!才不是...
任何见解将不胜感激!
recursion - 用键值对动态填充列表
我需要用对填写一个列表,例如:((x 10)(z 5))。
我目前的方法:
我意识到我还需要使用cons
来保持列表的完整性,但第一个问题是当我执行类似(setID z 5)
的操作时,返回的列表正是:((id val))
。显然,它需要是((z 10))
。有没有办法做这样的事情?
scheme - 如何在 Scheme Lisp 中将字符串转换为精确的数字?
例如,我有这个字符串:“6119726089.12814713”
如果我这样做(string->number "6119726089.12814713")
- 使用 SISC 实现,结果是6.119726089128147e9
- 在 Guile 实现中是6119726089.128147
,但我想要一个确切的数字,比如:611972608912814713/100000000
不损失精度。
我想要一个像 (string->exact) 这样的函数或类似的函数。
注意:请修复我的非母语英语并删除此消息。谢谢。
scheme - 如何在列表中最后一次出现元素之前获取列表?
我正在使用方案 R5RS。
给定一个包含多个条目的列表,我想返回该列表直到最后一次出现给定元素。
所以对于以下输入:
一个列表'("hi" "how" "are" "you")
关键字"you"
我想要以下输出:
列表'("hi" "how" "are")
我在方案 R5RS 中找不到具有此功能的功能,但也许我遗漏了一些东西。如果不存在这样的功能,我将如何实现它?
scheme - 方案 R5RS:定义 let 表达式
我想知道您将如何在 Scheme 中定义自己的 let 表达式(我对 scheme 很陌生)。我希望它看起来像(mylet id expr1 expr2),其中 id 绑定到 expr1 的值并在 expr2 中使用。我认为这将是这样的:
但这行不通。
当我尝试
我收到以下错误:
我究竟做错了什么?
math - 在 Scheme 中,我如何将一个精确的(有理的)数字分成被除数和除数?
我正在寻找的功能是这样的:
在 RnRS、SRFI 或任何自定义实现中是否有可能?