当前位置:  开发笔记 > 编程语言 > 正文

你能从Scheme中的函数中返回任何内容吗?

如何解决《你能从Scheme中的函数中返回任何内容吗?》经验,为你挑选了2个好方法。

我正在编写一个方案解释器,如果是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或'()是我个人所期望的.



1> Andrey Fedor..:

根据R6RS规范:

如果产生#f且未指定,则表达式的结果未指定.

所以狂野,回归你想要的任何东西!虽然#f或'()是我个人所期望的.



2> soegaard..:

Scheme确实可以返回任何值:

   > (values)

在R5RS中,if的单臂形式被指定为返回未指定的值.这意味着由您来决定返回哪个值.相当多的方案选择引入一个称为"未指定值"的特定值并返回该值.其他人返回"隐形值"#并且写入REPL使其不打印它.

   > (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))
  (#)

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有