scheme相关内容

方案 R5RS 的 ANTLR 语法

我是 ANTLR 的初学者,我正在通过一个例子来学习它.我使用 C 作为我的目标语言.该示例是取自 这个问题的 Scheme R5RS 语法文件,稍加修改(重命名语法名称并添加一些选项,语法规范不变). antlr 生成词法分析器和解析器,我用一个测试 main() 编译它,其中我只做一些初始化并简单地调用解析器.当用一段方案代码运行测试程序时,解析器检测到一些语法错误(这不应该发生!) ..
发布时间:2021-11-11 03:44:58 其他开发

理解尾递归向量

我有一个尾递归函数,可以将向量转换为列表.我单独理解每一行,但有几个问题: 首先,在代码中cons ((vector-ref v i) r) (- i 1) 是什么意思?(标记为“Q1".)我知道它需要向量 v 的第 i 个元素并将它与 i-1 连接起来,但是为什么必须是 i-1?为什么不使用 i+1?例如如果向量 v 长度总共为 5,则元素编号 5 与编号 4 连接.我知道它正在制作向量列 ..
发布时间:2021-09-04 19:23:28 其他开发

在 Scheme 中访问调用堆栈深度

为了演示尾递归的有效性,我想在Scheme中动态访问调用栈的深度. 有没有办法做到这一点?如果没有,有没有办法在其他主要的函数式语言(OCaml、Haskell 等)中做到这一点? 解决方案 Racket 允许您在调用堆栈中存储值.您可以使用它来跟踪深度.这是我的做法: #lang球拍;;;该模块包含用于跟踪的工具;;;当前深度.(模块深度球拍(provide (rename-ou ..

有没有办法在这种语言中更改变量的值?

我正在用 scheme 编写一个过程,我试图操纵变量的值.我使用 define 函数为变量赋值,但我无法更改该值.我会使用 let 函数,但变量更改仅在 let 函数的主体中有效.是否有其他方法可以操作变量并能够从过程中的任何位置查看更改? 谢谢 解决方案 可以使用set! set-car! set-cdr! 在变量被定义之后 ..
发布时间:2021-07-16 21:37:52 其他开发

在 Scheme 的 lambda 中使用 let 变量

这个问题的范围类似于:在 R6RS Scheme 中,有没有办法让当前环境与 eval 一起使用? 但我想更进一步,问你如何解决这样的问题. 我的问题更令人困惑,因为在我的情况下 '(+ x y) 是一个任意的未评估的 lambda 语句.未评估,因为它可能包含对属于 let 一部分的变量的调用(并且由于 Scheme 不相信该过程将在包含这些变量的环境中被调用,而当前的环境不包含这些变量, ..
发布时间:2021-07-16 21:36:22 其他开发

方案 Rswap 功能

有人帮我做这个功能吗? 使用表现类似于交换递归版本的方案函数. (reswap '((h i)(j k) l (m n o))) 应该返回 ((k j) (i h) (n m o) l) ; 和 (reswap '((a b) c (d (e f)) g (h i))) 应该返回 (c (b a) g ((f e) d) (i h))) 解决方案 试试这个: (定义(rs ..
发布时间:2021-07-16 19:48:48 其他开发

方案函数和列表,乘法,加法

我正在尝试在方案中编写 2 个函数,第一个函数会将列表中的每个值乘以用户指定的值,第二个函数会将一个数字添加到来自先前结果的列表中的所有值.我试过类似的东西,但球拍抛出一个错误. (定义测试(列表 1 1 2 3 5))(定义funca(*(测试)(2))) 解决方案 在 Scheme 中,我们使用 map 用于在列表上应用函数的高阶过程元素 - 请记住,您不能乘以一个列表,我们可以做的是乘 ..
发布时间:2021-07-16 19:48:45 其他开发

无向图的深度优先搜索 (DFS)

我正在查看这个. 如果给我一个包含边数(图形)、边对、起点和终点的列表,我如何确定是否存在路径? 我有一些想法,但在开始计划方面需要一些帮助. (is_it_a_path? '(4 ((1 2) (2 3) (3 4) (2 4))) 1 4) ;返回真(is_it_a_path? '(3 ((1 2) (2 3) (3 1))) 2 3) ;也返回真 下面的 4 是顶点数,(1 ..
发布时间:2021-07-16 19:48:42 其他开发

缺点框实现

我似乎无法找到一种在 Ruby 中执行 Scheme 的 cons 框的方法(似乎它几乎是所有数组).这是一个非常粗略的概述: 类的缺点def 初始化(汽车,cdr)@汽车 = 汽车@cdr = cdr结尾#返回对方的车定义汽车返回@car结尾#返回配对的cdr明确的CDR返回@cdr结尾结尾 我可以传递两个值并调用 car 和 cdr,但这不是任何类型的列表(只有两个值).如何制作一个列表, ..
发布时间:2021-07-16 19:48:36 其他开发

Scheme 中的真值

方案标准中是否定义了真值的含义?或者 Scheme 评估器的实现者是否可以选择将其定义为:(define (true? x) (eq? x #t))? 解决方案 方案标准是否定义了真值的含义? 是的,“真"的意思在 Scheme 中有明确定义. Scheme 标准有很多,但在所有标准中只有两个布尔对象;它们具有外部表示 #t 和 #f.R7RS 还要求布尔对象具有替代的外部表示 ..
发布时间:2021-07-16 19:48:33 其他开发

如何在不使用 append in scheme 的情况下附加列表列表?

假设你想追加这些列表并输出一个包含所有数字的列表 (append-lists (list (list 1 2)(清单 4 5)(列表 10 19))) =>(列表 1 2 4 5 10 19) 如果使用普通追加,我可以这样做, ((define (append-lists llon)(条件[(空?llon)空][(缺点?llon)(缺点(第一个llon)(附加列表(rest llon)))] ..
发布时间:2021-07-16 19:48:22 其他开发

方案确定树列表中的字符串与否

这是我的数据定义, (define-struct Leaf());;解释:代表一个 BT 上的叶子节点,一个没有子节点的节点(定义结构节点(字左右));;解释:用一个词,一个左和一个右代表一个BT上的节点;;子树;;二叉树(BT)是其中之一;;- (制作叶子);;- (make-node String BT BT);;bt-有吗?: BT 字符串 ->布尔值;;给定一个 BT 树和一个字符串 w ..
发布时间:2021-07-16 19:48:08 其他开发

解释延续中引用的变量的不同行为?

以下是两种情况,它们在调用存储的延续时对 i 的值具有不同的行为.如何解释这种差异? 案例 A >(定义cc #f)>(定义(x)(让 ((i 0))(设置!我(+我100))(+ i (+ i (call/cc (lambda (k) (set!cc k) 1)))) ;通话/抄送不包含在 set 中!(设置!我(+我10))一世))>(X)110>(cc 50) ;上下文变量 i 随 ..
发布时间:2021-07-16 19:48:04 其他开发

fast-exp 中的 SICP 1.2.4 错字?

我正在学习 SICP,我不确定这是书中的错误还是我遗漏了什么. 为了计算fast-exp,作者给出了以下规则: b^n = (b^(b/2))^2 如果 n 是偶数 b^n = b * b^(n - 1) 如果 n 是奇数 然而,当他们展示偶数 n 的实现时,我们有: ((even? n) (square (fast-expt b (/n 2)))) 我认为这是正确的. ..
发布时间:2021-07-16 19:48:01 其他开发

编写一个函数,找到最小的 k 使得 x 和函数之间的差异

我遇到了代码不完整和明显错误的问题.对于我的函数 (terms-needed x tol) 我应该找到最小的 k 使得 x 和 (square (babylonian xk)) 小于 tol (公差).换句话说,我们应该测量函数 (babylonian x k) 中 k 需要多大才能提供平方根的良好近似. 截至目前,我收到“应用程序:不是程序;"的错误消息用我的代码 (define (sq ..
发布时间:2021-07-16 19:47:55 其他开发

方案“不是函数"错误

我正在学习 Scheme 并且我不断收到此错误:“错误:20 不是函数"来自以下代码: (定义 myFunction (lambda (x y)(* x y)))(定义(高阶函数 x y)(功能 x y))(显示 ((higherOrder myFunction 4 5))) 我试图传递一个函数作为参数之一.它通过数学运算,因为它在错误消息中说“20"和 (5 * 4 = 20) 但它认为它是 ..
发布时间:2021-07-16 19:47:46 其他开发

方案“错误:(4 6 5 87 7)不是函数"

我刚刚问了一个类似的问题并得到了我需要的答案,但他的时间我找不到任何会导致此错误的额外括号:“错误:(4 6 5 87 7)不是函数".是不是因为别的原因?我的代码需要一个数字,如果它已经在列表中,它不会添加它.如果列表中尚未包含该数字,则添加它. (定义(插入 x ls)(insertHelper x ls '() 0))(定义(insertHelper x ls lsReturn 计数器)( ..
发布时间:2021-07-16 19:47:43 其他开发

递归子列表?功能

我似乎不知道如何编写一个正确的 uscheme(MIT Scheme 的衍生物)函数,该函数将返回布尔值,无论列表是否包含较小的列表. 这是我写的. (定义子列表?(xs ys)(如果 (= xs '())#t(如果 (= ys '())#F(如果(=(汽车xs)(汽车ys))(子列表?(cdr xs)(cdr ys))(子列表?xs(cdr ys)))))) 除了这个测试用例外,它通过 ..
发布时间:2021-07-16 19:47:40 其他开发

在scheme中结合count和flatten函数

所以我有这两个单独工作的函数.我正在尝试编写一个函数来完成这两个任务,但我不断收到汽车错误.有关解决此问题的最佳方法的任何指导? (define (countNumbers lst)(条件((空?lst)0)((number? (car lst))(+ 1 (countNumbers (cdr lst))))(else (countNumbers (cdr lst)))))(定义(压平 x)(c ..
发布时间:2021-07-16 19:47:37 其他开发