1

我一直在查看 APL 代码示例,其中一些使用 QUAD FI、QUAD VI 和 QUAD VFI。前两个在我的教科书中进行了描述(APL 一种交互式方法)。当我在 APL2 中尝试这些时,我得到一个 VALUE ERROR。

APL2中是否有等价物?

4

2 回答 2

2
于 2021-08-07T10:05:59.490 回答
1

这是⎕VI我记得在 1980 年代的某个时候在 APL Quote-Quad 中看到的等价物,它是从记忆中输入的。我想原作者是 G. Bamberger。当我在主要的分时公司(夏普,STSC)上使用 APL,然后在没有 .的 IBM VSAPL 上工作时⎕VI,这个功能被证明非常有用。

     ∇ r←vi x;t;b                                                                                                                                                                                                                                          
[1]    t←' 11111111112345'[' 1234567890¯E.'⍳x]                                                                                                                                                                                                             
[2]    b←t='1'                                                                                                                                                                                                                                             
[3]    t←(b⍲0,¯1↓b)/t                                                                                                                                                                                                                                      
[4]    r←(⍎t,',⍳0')∊1 14 21 41 131 141 214 241 1321 1431 2131 2141 4131 14131 14321 21321 21431 21432 24131 41321 141321 214131 241321 2141321                                                                                                             
     ∇     

LdBethFI进行了更改以使其适用于空向量就可以了。

∇r←fi str;mesh
r←mesh\⍎(⍕(mesh←vi str)/(' '≠str)⊂str),',⍳0'
∇

(我在 Dyalog 上检查了这个⎕ML←3

有趣的地方vi是您不同意⎕VI的默认答案。

假设您希望高或低减有效,以及指数符号的大写和小写 E:

[1]    t←' 1111111111223345'[' 1234567890-¯Ee.'⍳x]   

或者,如果您想要逗号作为小数分隔符(在某些语言环境中)

[1]    t←' 11111111112345'[' 1234567890¯E,'⍳x]   

如果你根本不想支持 E 表示法

[1]    t←' 1111111111234'[' 1234567890¯.'⍳x]   

不要忘记相应地更改第 4 行的幻数,这是留给读者的练习。fi还可以在伴随函数中相应地替换字符。

最后,许多 APL 现在具有复数 ( 1J2, 1.0E42J1.000042),并且 vi 需要相应地更改。这vi不支持复数。未来的 APL 可能包括四元数、八元数、凯莱数,所有这些都可能需要更改为vi. 对于临时验证,处理1 1.0 1. .1就足够了。

于 2021-08-29T13:31:20.153 回答