回答
您可以使用let
方案声明局部变量。例如,在列表中创建与给定值绑定:
(let ((x 3) (y 4) (z 2))
(+ y z)) ; body
=> 6
现在,您可以评估涉及的<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
上面创建一个名为my-let
接收到这些绑定进行评估绑定的列表和一个表达式的宏,并返回评估结果。
这是清晨,我的咖啡杯丢失了,我想不出一种避免使用'eval'的方法,所以我们建议大家欢迎:) –
只是为了它,你可以有这样的语法规则:'' [(_(quote lst)exp)....]'其中'quote'是一个字面意思,但当然这有点作弊;) (尽管如果列表是第一个分配给一个变量并赋予'my-let') – Metaxal
@Metaxal我修改了一下我的代码,以便'lst'和'exp'现在可以作为变量传递,只要'exp'是一个带引号的表达式 –
一个简单的,直接的和便携的方式是定义一个访问器(在这个例子中,GETVAL)使用assq
:
(define vars '((x 3) (y 4) (z 2)))
(define (getval sym) (cadr (assq sym vars)))
或其任何变化。然后使用方法如下:
(+ 3 (getval 'x))
=> 6
(+ (getval 'y) (getval 'z))
=> 6
- 1. 如何将GUID值分配给变量?
- 2. 将值分配给变量从Android的排球
- 3. 如何将变量传递给“文本”球拍
- 4. 如何将Qt的行编辑中的值分配给变量
- 5. 如何在UNIX中将参数的值分配给变量?
- 6. 如何将HTML按钮值分配给JavaScript中的变量?
- 7. 如何将ArrayBuffer分配给scala中的变量值
- 8. 如何将回调返回值分配给Mongoose中的变量?
- 9. 如何将数值分配给产品中的变量?
- 10. 如何将int分配给String变量?
- 11. Slick2D如何将PNG分配给变量
- 12. 如何将表名分配给变量?
- 13. 如何将super分配给变量?
- 14. 如何将MojoX :: Redis分配给变量?
- 15. 如何将JavaScript函数中的变量的值分配给Mason变量?
- 16. 将输入值分配给双变量
- 17. 将CSV值分配给变量
- 18. XSLT:将值分配给全局变量
- 19. 将值分配给变量列表
- 20. MySQL:将列值分配给变量
- 21. 将订阅值分配给变量:Angular2
- 22. 将JSON对象值分配给变量
- 23. SCSS:将两个值分配给变量
- 24. 将javascript值分配给PHP变量
- 25. NetCDF4将值分配给变量问题
- 26. MySQL将返回值分配给变量
- 27. Bash将尾值分配给变量
- 28. 将复选框值分配给变量
- 29. 将错误值分配给变量
- 30. SAS将哪个值分配给变量?
你问题的第一部分,建议你真的要加引号的符号列表,但第二部分建议你不知道很多关于S-EXPS,因此,你可能会后,更简单的答案。如果后者是真的,你想要的是奥斯卡关于“让”的答案的第一部分,而不要看第二部分。 – Metaxal