我一直在查看 APL 代码示例,其中一些使用 QUAD FI、QUAD VI 和 QUAD VFI。前两个在我的教科书中进行了描述(APL 一种交互式方法)。当我在 APL2 中尝试这些时,我得到一个 VALUE ERROR。
APL2中是否有等价物?
这是⎕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
就足够了。