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)
谢谢
您可以使用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,它接收绑定列表和要使用这些绑定进行评估的表达式,并返回评估结果。