我正在努力学习APL (一般APL和Dyalog APL,它似乎正在开发中,并在斯德哥尔摩使用)。
在这样做时,我观察到,在我的Ubuntu环境中,dyalog (实际上是通过一个名为/usr/bin/dyalog的符号链接到达的名为mapl的文件)在将stdin与管道或打开的磁盘文件相关联而不是终端驱动程序时的行为似乎有所不同。
当我用管道代替终端驱动程序作为标准输入时,解释器似乎不再理解]显示。
在这里,]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在这里,解释器似乎对]显示感到困惑:
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代码时,是否有一种不丢失]显示功能的简单方法?
最诚挚的问候!汉斯·戴维森
发布于 2017-08-16 09:05:05
更新的回答:以下应该解决您的请求:
( echo "]DISPLAY 42" ; echo ")off" ) | /opt/mdyalog/16.0/64/unicode/mapl salt 唯一改变的细节是,在尝试执行UCMD之前,我们现在正在加载salt工作区。SALT将(通过其⎕LX)设置环境,以便能够处理UCMD。
我最初的回答是:我是一个Windows用户,必须承认我从来没有使用过管道,所以我无法控制一般的机制。
但我对这个具体的问题有一个答案。]DISPLAY:您可以使用⎕se.UCMD'{ucmd & args}'调用程序控制下的任何UCMD,例如:⎕se.UCMD'DISPLAY ⍳3 3'
顺便说一句,我亲自调用了⎕se.Dyalog.Utils.disp MyVar,它避免了UCMD-机制,在从fn调用时甚至更容易使用。
发布于 2017-08-18 06:21:21
注意:单击下面的任何代码行在“尝试它”在线网站上尝试它。该服务将其输入文本字段(链接将使用适当的代码填充)的内容排入Linux,因此完全类似于您的环境。
Dyalog在运行脚本时不填充⎕SE (例如接收管道输入)。如果只需要显示功能,则可以从dfns复制等效的实用程序。
但是,这仍然迫使您使用完整的命名空间路径从#以外的其他名称空间调用#。要使用户命令实际可用,必须手动启用SALT:
为了避免工作空间和会话混乱,可以使用以下dfn:
https://stackoverflow.com/questions/45692159
复制相似问题