0

我想知道我是否能够使用方案中的内置 let 函数在函数中定义两个随机变量,而它们的值不会在整个代码中发生变化。例如,如果我写:

 (let (x (- (* 2 (random)) 1)))
 (let (y (- (* 2 (random)) 1)))

x 的值会在函数退出之前保持不变吗?我想平方 x 和 y 并取它们的平方根,但我需要它们的值保持不变。

4

1 回答 1

0

是的,let将一个值绑定到给定的标识符,除非您使用它,否则它的值不会改变set!

所以你可以这样做:

(let ((x (- (* 2 (random)) 1))
      (y (- (* 2 (random)) 1)))
  (sqrt (+ (* x x) (* y y))))

当然,我发现hypot为你正在做的事情定义一个函数更容易(对应于 C 的hypot函数):

(define (hypot x y)
  (sqrt (+ (* x x) (* y y))))

(hypot (- (* 2 (random)) 1)
       (- (* 2 (random)) 1))

现在你根本不需要使用let

如果连接不是很明显,let幕后的工作方式是创建一个函数(hypot在这种情况下,其内容与 几乎相同),并使用您绑定的值调用该函数。因此,上面的两个代码片段实际上是相同的(除了后者还添加了一个顶级绑定hypot)。

于 2013-09-10T01:41:18.897 回答