我正在编写一个方案解释器,如果是if语句,例如:
(if (< 1 0) 'true)
我试过的任何解释器都会返回一个新提示.但是当我对此编码时,我有一个if是否有另一种表达方式.如果不打印任何东西,我可以返回什么?
(if (has-alternative if-expr) (eval (alternative if-expr)) #f) ;; what do I return here?
Andrey Fedor.. 10
根据R6RS规范:
如果
产生#f且未指定 ,则表达式的结果未指定.
所以狂野,回归你想要的任何东西!虽然#f或'()是我个人所期望的.
根据R6RS规范:
如果
产生#f且未指定 ,则表达式的结果未指定.
所以狂野,回归你想要的任何东西!虽然#f或'()是我个人所期望的.
Scheme确实可以返回任何值:
> (values)
在R5RS中,if的单臂形式被指定为返回未指定的值.这意味着由您来决定返回哪个值.相当多的方案选择引入一个称为"未指定值"的特定值并返回该值.其他人返回"隐形值"#
> (void)
起初人们可能会认为,这与(值)相同,但请注意区别:
> (length (list (void))) 1 > (length (list (values))) error> context expected 1 value, received 0 values (Here (list ...) expected 1 value, but received nothing)
如果#
> (list (void)) (#)