问题标签 [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.
scheme - 方案 - 如何在不由更多列表组成的列表中获取每个列表
看起来像这样:
我试图让文档中的每个单词都应用一个函数。在哪里说(有趣的列表)。但是该函数永远不会被调用。
import - r5rs 中未定义的 ADT
我正在 r5rs 中编写 ADT,并且正在使用 DrRacket。我放在#lang r5rs
文件的顶部并从 DrRacket 中选择从源中确定语言,但它告诉我我的 ADT 未定义。我正在使用 DrRacket 6.0 版。这是我第一次遇到这种情况,无法理解我做错了什么。
我的 ADT
当我尝试创建 my-ADT 的实例时,我得到以下输出:my-ADT: undefined; cannot reference an identifier before its definition
当我#lang r5rs
从顶部删除并选择R5RS作为 DrRacket 中的语言时,它似乎可以工作。但是我的queue.rkt
文件仍然#lang r5rs
在顶部,并且从 Source 确定语言。当我远程#lang r5rs
并选择R5RS作为该文件中的语言时,我在my-ADT
文件中得到以下内容:
scheme - 为什么Scheme需要过程位置标签的特殊概念?
为什么Scheme需要过程位置标签的特殊概念?
标准说:
作为评估 lambda 表达式的结果而创建的每个过程(在概念上)都标记有存储位置,以便生成 eqv? 和情商?程序工作
eqv? 过程返回 #t 如果:
- obj1 和 obj2 是位置标记相等的过程
情商?和eqv?保证在...程序上具有相同的行为...
但同时:
变量和对象(例如对、向量和字符串)隐式表示位置或位置序列
eqv? 过程返回 #t 如果:
- obj1 和 obj2 是表示存储中相同位置的对、向量或字符串
情商?和eqv?保证在 ... 对 ... 和非空字符串和向量上具有相同的行为
为什么不将“隐式表示位置或位置序列”也应用于程序呢?
我认为这也与他们有关,我认为这方面的
程序没有什么特别之处
macros - 如何在 SISC/Scheme 中创建一个生成另一个宏的宏?
在 Guile 或使用 SRFI-46 中,可以像指定自定义省略号标识符中所示一样。但是在 SISC 或“纯方案”R5RS 中是否有可能?
我知道不使用省略号是可能的,但是如果我需要像下面的示例那样使用内部省略号怎么办?
scheme - assoc 等效程序无法正常运行
我正在尝试编写一个类似于 Scheme 的 assoc 的过程。两者之间的唯一区别是,我希望我的程序只返回与给定键相关的值,其中 assoc 给出整个对(键.值)。这是我的程序:
我似乎在正确的轨道上 - (search-list 'a alist) 返回 1。但是,当使用 (search-list 'b alist) 进行测试时,这是我的输出: ((b . 2) (c . 3 ))
我不明白为什么我的程序没有按我的意愿运行。如果您能指出我的程序中的错误,我将非常高兴。提前致谢。
inheritance - 是否可以在 Scheme 中“扩展”函数/lambda/宏?
例如:如果我想让函数equal?
识别我自己的类型或记录,我可以添加一个新的行为equal?
吗?不擦除或覆盖旧的?
或者例如,如果我想让函数"+"
也接受字符串?
inheritance - 可扩展的宏定义
受到有关函数而不是宏的相关问题的评论线程的启发。
有什么方法可以扩展一个 Scheme 语法定义,以便它可以在新定义中使用之前的语法定义?此外,这必须是可扩展的,也就是说,必须可以将技术链接在一起多次。
例如,假设我们想要扩展lambda
,以便每次调用定义的函数时lambda
,它都会在执行函数体之前打印“foo”。我们可以通过以下方式做到这一点:
我们还可以通过执行以下操作以另一种方式扩展它(例如,通过打印“bar”):
最终结果是使用我们的 new 定义的函数将在lambda
每次调用时打印“foo”,然后打印“bar”。
然而,除了用大量old-lambda-<x>
的old-lambda-<x>
. 这不能自动化,因为您也不能gensym
在语法定义中使用。因此,没有很好的方法可以使其可扩展;唯一可行的解决方案是将每一个old-lambda-print-foo
或类似的东西命名为消除歧义,这显然不是一个万无一失的解决方案。(举个如何失败的例子,假设代码的两个不同部分被扩展lambda
为打印“foo”;自然,他们都会命名它old-lambda-print-foo
,瞧!lambda
现在是一个无限循环。)因此,这将是非常如果我们能够以理想的方式做到这一点,那就太好了:
- 不需要我们用大量的污染命名空间
old-lambda-<x>
- 或者,如果做不到这一点,保证我们不会发生冲突。
hash - SHA256 的“纯”方案实现(R5RS)?
我可以使用外部库(Java、C 或系统相关)或使用特定的 Scheme 实现(例如 Chicken)在 Scheme 中使用 SHA256,但我想知道是否有“纯”方案实现。
functional-programming - 使用方案本身实现内置方案函数 begin(),相同的代码在 MIT-SCHEME 和 Racket 中的行为不同?
我正在阅读r5rs方案标准,发现begin()其实是一个库语法,也就是说可以由scheme自己定义,标准在标准末尾给出了实现。
我按照 r5rs 使用如下定义语法实现了 begin():
然后我尝试使用函数来实现它,这是我的代码:
这是我的测试用例:
我使用#lang 方案在 MIT-SCHEME 和 Racket 中运行我的代码,x 在 MIT-SCHEME 和 Racket 中都是 5,但是,y 在 MIT-SCHEME 中是 4,而在 Racket 中是 5
所以,这是我的问题:
- 我们真的可以使用纯函数方案实现 begin() 吗?
- 我的代码有什么问题吗,无论是使用宏的代码还是使用函数的代码?
- 为什么相同的代码在 MIT-SCHEME 和 Racket 中表现不同?
documentation - Scheme 有官方文档标准吗?
Java有javadoc。Python 有文档字符串。但是Scheme呢?
我想知道是否有任何标准的方式来评论 Scheme 程序,以便以后创建文档。
在 Google 上很难找到它,因为“方案”意味着很多东西。谢谢!
请注意,我不是在寻求 Scheme 文档工具的建议;我只是想知道是否像其他语言一样存在用于记录 Scheme 的标准格式。