Scheme 设置球拍模块中未绑定标识符错误

Scheme 设置球拍模块中未绑定标识符错误,scheme,racket,Scheme,Racket,我尝试编写一个函数,返回第一个参数和第二个参数之间的随机数 (40-80之间随机) 应该给出一个介于40和80之间的随机数。代码如下: (define (random-between x y) ((set! result (random y)) (if (> result x) result (random-between x y)))) 我假设当函数第二次递归运行时,随机函数会创建一个新的结果,该结果将再次被测试,如

我尝试编写一个函数,返回第一个参数和第二个参数之间的随机数

(40-80之间随机)

应该给出一个介于40和80之间的随机数。代码如下:

(define (random-between x y)
   ((set! result (random y))
        (if (> result x)
            result
            (random-between x y))))
我假设当函数第二次递归运行时,随机函数会创建一个新的结果,该结果将再次被测试,如果它高于x,则作为最终结果输出

这是我第一次使用“set!”,它给了我以下错误:

设定!:模块中未绑定的标识符:结果


其他类似的问题并没有帮助我找到解决办法。

我将回答我自己的问题,就像我希望其他人回答一样。不是尖刻的回答或书籍推荐

是的,您需要使用具有以下语法的let:

(let ([id value]) body-which-is-evaluated-after)
这是一段没有递归的代码,可以提高速度和效率

(define (random-between x y)
    (let ([result (- y x)]) 
         (+ (random result) x)))

((set!result(random y))…)
毫无意义。为什么不直接使用
let
?我的键盘坏了,如果不使用遥控功能来更改RAM中的位,我就无法键入“L”。也许我们都从某个地方开始。我不知道你在说什么,但是双括号通常是一个值得关注的地方,除非它是一个过程。在您的情况下,
set永远不会这样做。直到1小时前我才知道set和let的区别。我们都在学习,但学习的艰辛永远不会改变:DI并没有试图变得尖刻。但我想让你想想解决办法。我很高兴你接受了我提供的提示并做到了:D+1ohh。对不起,我可能反应过度了。没问题,我在学习计划时也有类似的反应。这就是一门40多年的语言的问题所在:D