APL的任何一种方言中是否有用于条件功能的符号或成语?

我敢肯定我错过了一些东西,因为它是一种基本的语言元素。在其他语言中,它称为条件运算符,但是在这里我将避免使用该术语,因为APL运算符完全是另外一回事。

例如C和 friend 有x ? T : FLISP具有(if x T F)Python有T if x else F等等。

我知道现代的APL有:If和 friend ,但是它们是控制程序流的必要语句:它们不返回值,不能在表达式内使用,当然也不能应用于 bool 数组。他们完全有不同的目的,对我来说很好。

我可以想到的唯一能进行功能选择的表达式是(F T)[⎕IO+x],它看起来并不简捷或可读,尽管即使在数组上也能完成工作:

      ('no' 'yes')[⎕IO+(⍳5)∘.>(⍳5)]
no  no  no  no  no
yes no  no  no  no
yes yes no  no  no
yes yes yes no  no
yes yes yes yes no

我尝试使用小队提出类似的表达式,但是在 bool 数组上却惨败。即使可以,也仍然必须嵌入⎕IO或硬编码1,就可读性而言,这甚至更糟。

在继续定义自己的if并在我将要编写的每个程序上使用它之前,是否有这方面的规范?我是否缺少明显的功能或运算符?

(SO上有APL程序员吗?:-)

最佳答案

是的,SO上有APL程序员(但数量不多!)。

我认为答案是对此没有标准。

对于标量解决方案,我使用“pick”:

  x⊃f t

对于 bool 数组,我像上面一样使用索引:
f t[x]

我总是使用索引原点零,因此不需要加1,并且不需要括号。

如果这些还不够简单,我认为您必须使用名为“if”的函数来覆盖它们。这也将使您在t f的更自然排序中置入对与错。

关于functional-programming - APL中的条件功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15752895/

10-10 19:50