如果有APL的条件?

时间:2016-06-15 20:22:43

标签: if-statement apl gnu-apl

所以,我想知道/要求;是否可以在APL中执行If语句?如果是这样的话?

这是我的代码

    'Please enter a number to count to: ' 
 number ←⎕ 
 ⍳number

我如何获得一个if语句,如果用户输入的数字超过100,它将打印出来"太高"结束或者如果它是100或者那么它会继续吗?

谢谢!

4 个答案:

答案 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 终止所有执行。