问题标签 [plai]

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 投票
3 回答
1811 浏览

scheme - 如何解决此错误“在定义之前引用标识符:with”

我正在学习“编程语言:应用程序和解释”,执行后可以在 DrRacket 5.2.1 中运行前两章的示例#lang plai。但是当我输入第 3 章的第一个示例时,如下所示:

我收到以下错误:

with我在这本书中没有找到 的定义。我需要图书馆吗?

0 投票
2 回答
252 浏览

scheme - 如何使用 DrRacket 5.2.1 在 Emacs 中编辑和运行 PLAI 代码

我正在学习PLAI,现在我已经在 DrRacket 中运行了第 3 章的代码(带有#lang plai),但我是 DrRacket 的新手。我可以只在 Emacs 中编辑和运行代码吗?

0 投票
1 回答
470 浏览

racket - PLAI 中第 76 页中 {with {x 3} {+ xx}} 的评估

我正在学习PLAI的第8章“实现懒惰”,并完成了以下CFAE/L:

根据这个解释,我想评估 page76 的

(1) 打字时:

(interp (parse '{with {x 3} {+ xx}}) {mtSub}) 我得到如下错误:

numV-n:违反合同,预期:numV?,给定:(exprV(num 3)(mtSub))合同来自:numV-n,指责:使用合同:(-> numV?数字?)在:/study/lisp /plai/chapter8.scm:10.9

(2) 为了理解page76的描述,我想写下步骤如下:“解释器将主体中的每个x评估为表达式闭包(因为这是环境中绑定到x的内容),但添加过程不能处理这些:它(以及类似的任何其他算术原语)需要确切地知道表达式闭包对应的数字。”,但在完成这些步骤后我仍然不清楚这个描述。有我的步骤: (interp (parse '(with (x 3) (+ xx))) (mtSub))

step1: (parse '(with (x 3) (+ xx))) => (app (fun 'x (add (id 'x) (id 'x))) (num 3))

step2: (cloSureV 'x (add (id 'x) (id 'x)) (mtSub)) (as fun-val)

step3: (interp (add (id 'x) (id 'x)) (aSub 'x (num 3) (mtSub)))

提前致谢!

0 投票
2 回答
104 浏览

scheme - 第九章PLAI第一个程序中程序的执行包括哪些步骤

PLAI的第 9 章“理解递归”中,一开始有一个阶乘示例:

在第 90 页,作者说“在继续阅读之前,请暂停片刻,仔细研究程序,写下每个阶段的环境,逐步通过解释器,甚至可以运行程序,以说服自己“这个错误将会发生。彻底理解错误对于遵循本节的其余部分至关重要。”
但是我不确定我是否可以完整地写下这些步骤,有人愿意帮我写下这些步骤吗?提前非常感谢!

0 投票
1 回答
712 浏览

recursion - 二进制算术程序中的“应用程序:不是程序”

我有一个简单的球拍定义,用于将二进制数相乘。它使用经过充分测试的“addWithCarry”定义,该定义采用三个参数:两个列表和一个进位数字并返回二进制和。二进制数以相反的顺序表示为列表。

我用调试器逐步完成了测试线,它正确地通过了递归。每次适当地缩小 y 列表时,它都会执行 multBins,然后按预期执行 addWithCarry 函数。当它返回堆栈时,它突然抛出一个异常“应用程序:不是一个过程,期望一个可以应用于参数的过程”,参数为'(0 0 0 1 0 1 1),这是最高的值“x”添加到总数中。我知道当您尝试将函数的结果作为带参数的函数应用时,可能会发生此错误,但我在这里看不到。看着调试器,一切似乎都在完美运行,直到最后。有任何想法吗?

这是 addWithCarry 定义:

0 投票
5 回答
2068 浏览

scheme - how to write scheme function that takes two lists and return one list like this

how to implement this function

if get two list (a b c), (d e)

and return list (a+d b+d c+d a+e b+e c+e)

list element is all integer and result list's element order is free

I tried this like

but it return error because result is '()

I don't know how to solve this problem please help me

0 投票
1 回答
307 浏览

scheme - 方案球拍阴影变量检查

我需要函数来检查变量是否被遮蔽?函数应该返回 #t 或 #f 基于变量是否被遮蔽。我使用 DrRacket 来实现代码(#lang plai)。到目前为止,我有这个...

这是检查变量是否被遮蔽的函数,但它不起作用

0 投票
1 回答
233 浏览

tree - #lang plai 球拍乘数函数

我正在做一个项目,让我们习惯在编程语言课程中使用 plai 类型的语言。我一直被困在一个真正困扰我的问题上(完成了所有其他问题,没有问题)。我们将采用这种数据类型定义:

然后“实现函数'scaled',它接受一棵树并返回一棵具有相同形状的树,但所有值都乘以给定的比例。

示例:(scaled (node -5 (leaf 6) (leaf -7)) 2) 应该产生 (node -10 (leaf 12) (leaf -14))"

所以基本上我只需要将所有这些值乘以一个给定的值,在这个例子中是 2。

在尝试不同的方法后,这是我迄今为止所拥有的:

我基于之前为我做对的作业的其他部分创建的代码。问题是,它将所有数字和结果“成功地”与 420 的解相乘,而不是单独将每个值相乘。我知道这与我放置“n”有关,但我尝试了很多不同的方法,但都没有运气。如果有人有任何有用的提示/提示/解决方案,将不胜感激。

谢谢!

0 投票
1 回答
481 浏览

racket - 将 BNF 文法转换为 s 表达式

我定义了一个名为msl

我有一个解析器函数可以转换s-expressionmsl

我的问题是:如何将msl表达式转换为s-expression这样?我是这个主题的初学者

0 投票
1 回答
75 浏览

programming-languages - 证明一个表达式有一个类型

我正在为明天的最后一个练习表工作,我有点困惑,试图弄清楚问题在问什么以及如何解决它。我想在这里查一下,看看堆栈溢出的好人是否可以帮助我解决它。

问题是这样设置的:

显示一个派生树(它是类型检查的痕迹),证明以下表达式具有 type :

它基于这种类型检查的定义:

当我在球拍中运行它时:

我确实得到:

在底部它指出:

“您检查 'x 的类型必须是:numT”

所以它提出了 numT 但我对跟踪部分感到困惑,我知道这个问题很长,但这是所有练习问题中最让我困惑的一个。任何建议/帮助表示赞赏