所以,我想知道/问;是否可以在 APL 中执行 If 语句?如果有怎么办?
这是我的代码
'Please enter a number to count to: '
number ←⎕
⍳number
如果用户输入超过 100 的数字,我如何获得一个 if 语句,它将打印出“太高”并结束;或者如果它是 100 或以下,那么它会继续吗?
谢谢!
所以,我想知道/问;是否可以在 APL 中执行 If 语句?如果有怎么办?
这是我的代码
'Please enter a number to count to: '
number ←⎕
⍳number
如果用户输入超过 100 的数字,我如何获得一个 if 语句,它将打印出“太高”并结束;或者如果它是 100 或以下,那么它会继续吗?
谢谢!
在 Dyalog APL 中,你有一个叫做守卫的整洁的小东西。
它们可以在 dfns 中使用,并在某个条件匹配时评估代码。
func ← {⍵>100 : 'too high' ⋄ 1 : 'number is ok'}
如果您的 APL 支持控制结构,那么这应该可以工作:
∇ generateAll number
:If number>100
⎕←'Too high'
:else
⎕←⍳ number
:endif
∇
如果它不支持控制结构(如 APL2),您将需要分支:
∇ generateAll number
→(number>100)/error
⎕←⍳ number
→0
error:
⎕←'Too high'
∇
您也可以使用诸如执行之类的技巧,但这不太可读。
在 APL2 中进行错误处理* 的“经典”方式是使用⎕ES 或⎕EA。您的代码将如下所示:
⎕ES(NUMBER>100)/'Too high'
⍳NUMBER
这里发生的是,如果括号评估为真,那么将⎕ES
停止执行并回显引用的字符串。
如果您不希望 THEN 终止,请查看⎕EA
一些 APL 文档。
请注意,我在 GreenOnBlack 环境中使用 APL2,因此在更现代的方言(如 Dyalog)中可能有更巧妙的方法来执行此操作。
*我知道您问的是条件而不是错误处理,但是由于您的示例终止了执行,因此它也可能是错误处理。
这与 MBaas 的建议有一个关键的区别:他的解决方案将优雅地退出可能返回值的当前函数。使用⎕ES
或⎕EA
终止所有执行。
取决于您使用的方言。一些 APL 实现支持控制结构,所以你可以写类似
:If number>100
⎕←'Too high'
→0
:endif
⍳number
在“传统 APL”中,您可能会做类似的事情
⍎(number>100)/'⎕←''Too high'' ⋄ →0'
⍳number