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