APL的任何一种方言中是否有用于条件功能的符号或成语?
我敢肯定我错过了一些东西,因为它是一种基本的语言元素。在其他语言中,它称为条件运算符,但是在这里我将避免使用该术语,因为APL运算符完全是另外一回事。
例如C和 friend 有x ? T : F
LISP具有(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/