我正在尝试学习APL(一般来说都是APL和Dyalog APL,它们似乎正在斯德哥尔摩积极开发和使用中)。
这样做时,我发现在我的Ubuntu Linux环境中,当将stdin与a关联时,dyalog(实际上是通过名为/ usr / bin / dyalog的符号链接访问的名为mapl的文件)的行为似乎有所不同。管道或打开磁盘文件,而不是终端驱动程序。
当我用管道将终端驱动程序替换为标准输入时,解释器似乎不再理解] DISPLAY。
这里的[DISPLAY]命令/功能似乎有效:
Command: dyalog without arguments or stdin redirection :
Dyalog APL/S-64 Version 16.0.30320
Unicode Edition
Mon Aug 14 19:27:14 2017
]DISPLAY 42
42
在这里,解释器似乎对] DISPLAY感到困惑:
root@lenovo201707:/home/u/20170814# ( echo "]DISPLAY 42" ; echo ")off" ) | dyalog
Dyalog APL/S-64 Version 16.0.30320 Unicode
For i86_64
Created: Jul 7 2017 at 02:48:48
Copyright (c) Dyalog Limited 1982-2017
]DISPLAY 42
VALUE ERROR
root@lenovo201707:/home/u/20170814#
从现有的UTF-8编码文件加载并执行我的APL代码时,有没有一种简单的方法可以不丢失] DISPLAY函数?
最好的祝福 !
汉斯·戴维森
最佳答案
更新的答案:
以下应该可以解决您的请求:
( echo "]DISPLAY 42" ; echo ")off" ) | /opt/mdyalog/16.0/64/unicode/mapl salt
唯一已更改的细节是,我们现在在尝试执行UCMD之前正在加载salt工作区。 SALT将(通过其LXX)设置环境,以便它可以处理UCMD。
我的初步答复:
我是Windows用户,必须承认我从未使用过Linux Pipes,因此我无法提供一般机制。
但是我对具体问题有一个答案。
]DISPLAY
:您可以使用⎕se.UCMD'{ucmd & args}'
在程序控制下调用任何UCMD,例如:⎕se.UCMD'DISPLAY ⍳3 3'
顺便说一句,我个人称为
⎕se.Dyalog.Utils.disp MyVar
,它避免了UCMD机制,并且从fn调用时更易于使用。关于ubuntu - 标准输入的重定向似乎改变了Dyalog APL程序的行为(当使用名为dyalog的符号链接(symbolic link)调用mapl时),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45692159/