标题很可能与我的意思不明确,但我有这个问题要做:
考虑包含变量x,y,z和二元运算符+,*的算术表达式的语法.
<expr> -> <term> { + <term> }
<term> -> <factor> { * <factor> }
<factor> -> <var> | ( <expr> )
<var> -> x | y| z
Run Code Online (Sandbox Code Playgroud)
在Scheme中编写一个名为executer的函数,它接受一个可从上述语法派生的表达式字符串并输出表达式的值,假设x,y和z分别为2,4和8.例如电话
(executer "((x * x) + y * (z) + y)")
Run Code Online (Sandbox Code Playgroud)
应该产生40.您的实施必须确定非法表达并遵守"*"优先于"+".
现在我一直在努力做到这一点,但我不知道如何在计划上解决这个问题.我试图自己解决这个问题,但我选择向你们寻求帮助.
您认为可能有用的文档或其他类似代码的任何链接都会很棒.
提前感谢我为此提供的任何帮助.
我正在尝试在DrRacket中开始编写方案.我让DrRacket工作了很短的时间,然后我起身去喝咖啡,回来后现在它不会启动.当我点击DrRacket.exe时,它不会显示DrRacket用户界面,而是显示一个带有以下文本的控制台框:
read-bitmap: expects type <path-string or input-port> as 1st argument, given: '#
(#<procedure:draw-honu> 270 270); other arguments were: 'unknown/alpha #f #t
[退出.关闭框或Ctrl-C关闭控制台.]
我尝试重新安装没有成功.我也确保我有64位版本而不是32位版本.
使用方案我需要使用以下功能.(所有args都是自然数[0,inf))
(define safe-div
(lambda (num denom safe)
(if (zero? denom)
safe
(div num denom))))
Run Code Online (Sandbox Code Playgroud)
但是,此功能经常被调用,并且表现不佳(速度快).是否有更有效的方法来实现所需的行为(num和denom的整数除法,如果denom为零则返回安全值)?
注意,我正在使用Chez Scheme,但是这个用于只导入rnrs的库,而不是完整的Chez.
我试图truncate在方案中使用该函数,DrRacket继续发出此消息
ProblemA.rkt:27:46: truncate: this function is not defined in: truncate
Run Code Online (Sandbox Code Playgroud)
是否有导入或我可以添加的内容,以便编译器可以找到该库truncate?
基本上我想做整数除法的方案,以便98/10 = 9代替9.8,但truncate功能不工作.
我有一个作业,我需要计算输入中的对数.
这是我到目前为止:
(define x 0)
(define number-of-pairs
(lambda (v)
(if (pair? v)
(+ x 1)
(+ x 0))))
Run Code Online (Sandbox Code Playgroud)
然后我用它如下:
(number-of-pairs (cons (cons 'a 'b) 'c))
Run Code Online (Sandbox Code Playgroud)
它应该产生2,但它产生1,因为它只通过函数一次.如果我试试
(number-of-pairs 10)
Run Code Online (Sandbox Code Playgroud)
因为没有对,所以它会产生0.
我正在尝试为GIMP 2.8编写一个方案脚本,它将调整大小并重命名/复制文件.作为其中的一部分,我想根据脚本中的布尔值设置更改输出文件名.
然而,我的条件被忽略了.这是脚本的摘录(基于此线程中的一个):
(define (script-fu-batch-resize globexp globext src)
(define (resize-img n f newx suffix srcdir removetailingunderscore)
(let* ((fname (car f))
;get path, short name + extension (remember to remove source dir to REPLACE with suffix!)
(fullname (car (last (strbreakup fname "\\"))))
(filepath (substring fname 0 (- (string-length fname) (string-length (string-append srcdir fullname)))))
(name0 (car (strbreakup fullname ".")))
(name1 (substring name0 0 (- (string-length name0) 1)) )
(when
(> 1 0)
(
(name0 (name1) )
)
)
(extension (cadr …Run Code Online (Sandbox Code Playgroud) 在Scheme R6RS中是否可以打印变量的名称?我的意思是:
(define (f)
(lambda (arg)
(display ( *name* arg))))
Run Code Online (Sandbox Code Playgroud)
这样:
(define my-var 3)
(f my-var) ; => displays the string "my-var")
Run Code Online (Sandbox Code Playgroud) 我正在通过Brain harvey进行计算机编程的结构和解释.我遇到了这个问题,我无法弄清楚如何去做.
我们如何在Scheme中使用lambda编写递归过程?
(define self-add
(let ((x 0))
(lambda ()
(set! x (+ x 1))
x)))
Run Code Online (Sandbox Code Playgroud)(自我添加)=> 1
(自我添加)=> 2
(自我添加)=> 3
(自我添加)=> 4
(define self-add1
(lambda ()
(let ((x 0))
(set! x (+ x 1))
x)))
Run Code Online (Sandbox Code Playgroud)
(self-add1)=> 1
(self-add1)=> 1
(self-add1)=> 1
请告诉我如何理解上述两个功能之间的区别?非常感谢提前!最好的祝福.
这是代码(也在这里):
#lang racket
(define poorY
((lambda length
(lambda (ls)
(cond
[(null? ls) 0]
[else (add1 ((length length) (cdr ls)))])))
(lambda length
(lambda (ls)
(cond
[(null? ls) 0]
[else (add1 ((length length) (cdr ls)))])))))
Run Code Online (Sandbox Code Playgroud)
当我运行它:
> (poorY '(9 7 8))
. . application: not a procedure;
expected a procedure that can be applied to arguments
given: '(#<procedure>)
arguments...:
'(#<procedure>)
Run Code Online (Sandbox Code Playgroud)
屏幕截图如下所示:

我正在使用DrRacket作为代表.代码有什么问题?
scheme functional-programming combinators y-combinator racket
scheme ×10
racket ×4
recursion ×2
chez-scheme ×1
combinators ×1
gimp ×1
if-statement ×1
lambda ×1
performance ×1
r6rs ×1
scripting ×1
sicp ×1
truncate ×1
y-combinator ×1