在APL中获取值的类型

时间:2019-01-15 09:11:13

标签: types apl dyalog

我有一个长矢量,应该是字符矢量,但是当我使用Dyalog的DISPLAY函数打印它时,它却是一个混合矢量。现在,我需要找出哪些元素不是字符。如何在APL中检索值的类型?

3 个答案:

答案 0 :(得分:2)

使用⎕DRData Representation)检查事物的类型。对于char-vec,它是82(在32位解释器上)或80(64位)-由于64位平台支持unicode,因此也可以是160或320。嵌套向量是326。

注意::您还可以使用⎕DR¨调查哪个元素与您预期的不一样...

答案 1 :(得分:2)

我正在使用APL2。 天真的我会去

X≡¨⍕¨X

数字值获取1,字符值获取0。

Like this

答案 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或更早版本,则必须写{(,⍵)/,⍳⍴⍵}而不是