我有一个长矢量,应该是字符矢量,但是当我使用Dyalog的DISPLAY函数打印它时,它却是一个混合矢量。现在,我需要找出哪些元素不是字符。如何在APL中检索值的类型?
答案 0 :(得分:2)
使用⎕DR
(Data Representation)检查事物的类型。对于char-vec,它是82(在32位解释器上)或80(64位)-由于64位平台支持unicode,因此也可以是160或320。嵌套向量是326。
注意::您还可以使用⎕DR¨
调查哪个元素与您预期的不一样...
答案 1 :(得分:2)
答案 2 :(得分:0)
表达式* ⊃0⍴⊂A
为您提供A
的类型。简而言之,数组的类型是数组的副本,但是所有内容都递归地替换为数字的零和字符的空格。这意味着您可以将类型与0
进行比较以找到数字。
例如,以下具有某种欺骗性的默认显示形式的向量: Try it!
⊢v←'abc',1 2,'de 3 4',5
abc 1 2 de 3 4 5
盒装显示形式不能告诉您简单向量的每个元素的类型;它仅表示数组具有混合类型,并且在左下角带有+
: Try it!
]display v
┌→───────────────┐
│abc 1 2 de 3 4 5│
└+───────────────┘
现在我们找到类型: Try it!
⊢t←⊃0⍴⊂v
0 0 0
我们可以将其堆叠在原始矢量的上方,以指向数字: Try it!
↑t v
0 0 0
abc 1 2 de 3 4 5
或者我们可以将其与零进行比较以获得数字的掩码: Try it!
⊢m←0=t
0 0 0 1 1 0 0 0 0 0 0 1
最后,我们可以得到其中有**的索引: Try it!
⍸m
4 5 12
*如果您使用的是⎕ML←0
,那么⊃0⍴⊂
可以写为单个基本函数∊
**如果您使用的是15.0或更早版本,则必须写{(,⍵)/,⍳⍴⍵}
而不是⍸