标签: scheme

需要帮助解决Scheme Scheme Language的正则表达式问题

标题很可能与我的意思不明确,但我有这个问题要做:

考虑包含变量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.您的实施必须确定非法表达并遵守"*"优先于"+".

现在我一直在努力做到这一点,但我不知道如何在计划上解决这个问题.我试图自己解决这个问题,但我选择向你们寻求帮助.

您认为可能有用的文档或其他类似代码的任何链接都会很棒.

提前感谢我为此提供的任何帮助.

scheme racket

1
推荐指数
1
解决办法
169
查看次数

DrRacket不会开始

我正在尝试在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位版本.

scheme racket

1
推荐指数
1
解决办法
1074
查看次数

进行整数除法的最快方法是什么?

使用方案我需要使用以下功能.(所有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.

performance scheme integer-division chez-scheme

1
推荐指数
1
解决办法
876
查看次数

截断没有在DrRacket中定义

我试图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功能不工作.

scheme truncate integer-division racket

1
推荐指数
1
解决办法
2123
查看次数

计算Scheme中的对数

我有一个作业,我需要计算输入中的对数.

这是我到目前为止:

(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.

recursion scheme

1
推荐指数
1
解决办法
1117
查看次数

为什么我的条件语句被忽略了?

我正在尝试为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)

scripting scheme if-statement gimp

1
推荐指数
1
解决办法
895
查看次数

打印变量的名称

在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)

scheme r6rs

1
推荐指数
1
解决办法
206
查看次数

方案:我们如何用lambda编写递归过程?

我正在通过Brain harvey进行计算机编程的结构和解释.我遇到了这个问题,我无法弄清楚如何去做.

我们如何在Scheme中使用lambda编写递归过程?

recursion lambda scheme sicp

1
推荐指数
2
解决办法
3742
查看次数

这两个Scheme函数有什么区别?

  1. (define self-add
    (let ((x 0))
      (lambda ()
        (set! x (+ x 1))
        x)))
    
    Run Code Online (Sandbox Code Playgroud)

(自我添加)=> 1

(自我添加)=> 2

(自我添加)=> 3

(自我添加)=> 4

    2.
 (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

请告诉我如何理解上述两个功能之间的区别?非常感谢提前!最好的祝福.

scheme the-little-schemer

1
推荐指数
1
解决办法
119
查看次数

无法实现Y组合器的工作

这是代码(也在这里):

#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

1
推荐指数
1
解决办法
442
查看次数