4

所以,我想知道/问;是否可以在 APL 中执行 If 语句?如果有怎么办?

这是我的代码

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

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

谢谢!

4

4 回答 4

8

在 Dyalog APL 中,你有一个叫做守卫的整洁的小东西。

它们可以在 dfns 中使用,并在某个条件匹配时评估代码。

func ← {⍵>100 : 'too high' ⋄ 1 : 'number is ok'}
于 2016-10-29T15:27:57.283 回答
6

如果您的 APL 支持控制结构,那么这应该可以工作:

∇ generateAll number
:If number>100
   ⎕←'Too high'
:else
   ⎕←⍳ number
:endif
∇

如果它不支持控制结构(如 APL2),您将需要分支:

∇ generateAll number
 →(number>100)/error
 ⎕←⍳ number
 →0
error:
 ⎕←'Too high'
∇

您也可以使用诸如执行之类的技巧,但这不太可读。

于 2016-06-19T13:09:52.627 回答
3

在 APL2 中进行错误处理* 的“经典”方式是使用⎕ES 或⎕EA。您的代码将如下所示:

⎕ES(NUMBER>100)/'Too high'
⍳NUMBER

这里发生的是,如果括号评估为真,那么⎕ES停止执行并回显引用的字符串。

如果您不希望 THEN 终止,请查看⎕EA一些 APL 文档。

请注意,我在 GreenOnBlack 环境中使用 APL2,因此在更现代的方言(如 Dyalog)中可能有更巧妙的方法来执行此操作。


*我知道您问的是条件而不是错误处理,但是由于您的示例终止了执行,因此它也可能是错误处理。

这与 MBaas 的建议有一个关键的区别:他的解决方案将优雅地退出可能返回值的当前函数。使用⎕ES⎕EA终止所有执行。

于 2016-06-16T13:40:19.187 回答
2

取决于您使用的方言。一些 APL 实现支持控制结构,所以你可以写类似

:If number>100
   ⎕←'Too high'
   →0
:endif
⍳number

在“传统 APL”中,您可能会做类似的事情

⍎(number>100)/'⎕←''Too high'' ⋄ →0'
⍳number
于 2016-06-16T12:21:26.217 回答