我正在尝试学习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/

10-10 18:20