scheme - 从 when 语句中的函数返回

标签 scheme lisp racket

我想做的就是使用 when 语句返回一个值:( 我想要以下功能:

if(x)
    return y

我正在尝试使用:

(when (x) y)

但是 when 语句并没有以退出函数并返回 y 的方式求值。它只是愉快地继续下一行。有没有一种方法可以做到这一点而不用制作一个看起来非常丑陋的 if-else block ? mzscheme/racket 不允许 1-armed ifs。

最佳答案

好吧,我要做“那个人”;有充分的理由使用“极其丑陋”的解决方案,将函数的其余部分放在条件的“else”中;它使代码更易于阅读和理解。当我试图理解函数的作用时,我不想扫描所有代码来寻找隐藏的 return 和奇怪的控制流。简单明了的“if”或“cond”可以非常清楚地说明在什么情况下将使用每段代码。

如果您认真思考为什么喜欢“when+return”解决方案,我怀疑在某种程度上,您想要采取这种保护措施并将其“移开”您的认知过程,让其余的函数成为焦点。这(我声称)是导致细微错误的秘诀。

搜索你的感受;你知道这是真的!

编辑:一只 Ant 刚爬过我的笔记本电脑。这表明我说的是实话。

关于scheme - 从 when 语句中的函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29934035/

相关文章:

list - 在Scheme中的列表中添加元素

list - 在列表操作上执行 lisp 程序的正确方法

lisp - Racket 中的单例 (LISP)

c# - 通过注册表更改 PPPoE DSL 连接的代理设置

macros - Racket 中的 For 循环宏

scheme - 计划和 Racket 中的案例和报价

testing - 结构的 Rackunit 相等性检查

list - 如何在 Scheme 中使用 Car 和 Cdr break (11 (12 13))

lisp - CLISP 中需要解释

functional-programming - 普通 lisp 中的重复元素