如何为球拍中的变量赋值?

asu*_*ala 4 scheme variable-assignment racket

如果我有这个清单

'((x 3) (y 4) (z 2))
Run Code Online (Sandbox Code Playgroud)

我如何将 3 分配给 x,将 y 分配给 4,将 z 分配给 2 以使用它来进行数学运算?

3 + x
Run Code Online (Sandbox Code Playgroud)

或者

y + z
Run Code Online (Sandbox Code Playgroud)

谢谢

Ósc*_*pez 5

您可以使用let在 Scheme 中声明局部变量。例如,要使用列表中的给定值创建绑定:

(let ((x 3) (y 4) (z 2))
  (+ y z)) ; body

=> 6
Run Code Online (Sandbox Code Playgroud)

现在您可以计算任何涉及部件中声明变量的表达式<body>。您甚至可以let从绑定列表创建一个,例如使用宏:

(define-namespace-anchor a)
(define ns (namespace-anchor->namespace a))

(define-syntax my-let
  (syntax-rules ()
    [(_ lst exp)
     (eval `(let ,lst ,exp) ns)]))

(my-let '((x 3) (y 4) (z 2)) ; bindings as an association list
        '(+ y z))            ; expression to be evaluated

=> 6
Run Code Online (Sandbox Code Playgroud)

上面创建了一个被调用的宏my-let,它接收绑定列表和要使用这些绑定进行评估的表达式,并返回评估结果。