首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标准输入的重定向似乎改变了Dyalog APL程序的行为(当使用名为dyalog的符号链接调用mapl时)

标准输入的重定向似乎改变了Dyalog APL程序的行为(当使用名为dyalog的符号链接调用mapl时)
EN

Stack Overflow用户
提问于 2017-08-15 11:44:08
回答 2查看 226关注 0票数 3

我正在努力学习APL (一般APL和Dyalog APL,它似乎正在开发中,并在斯德哥尔摩使用)。

在这样做时,我观察到,在我的Ubuntu环境中,dyalog (实际上是通过一个名为/usr/bin/dyalog的符号链接到达的名为mapl的文件)在将stdin与管道或打开的磁盘文件相关联而不是终端驱动程序时的行为似乎有所不同。

当我用管道代替终端驱动程序作为标准输入时,解释器似乎不再理解]显示。

在这里,]DISPLAY命令/函数似乎可以工作:

代码语言:javascript
复制
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

在这里,解释器似乎对]显示感到困惑:

代码语言:javascript
复制
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代码时,是否有一种不丢失]显示功能的简单方法?

最诚挚的问候!汉斯·戴维森

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-16 09:05:05

更新的回答:以下应该解决您的请求:

代码语言:javascript
复制
( 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调用时甚至更容易使用。

票数 2
EN

Stack Overflow用户

发布于 2017-08-18 06:21:21

注意:单击下面的任何代码行在“尝试它”在线网站上尝试它。该服务将其输入文本字段(链接将使用适当的代码填充)的内容排入Linux,因此完全类似于您的环境。

Dyalog在运行脚本时不填充⎕SE (例如接收管道输入)。如果只需要显示功能,则可以从dfns复制等效的实用程序。

'display'⎕CY'dfns'

但是,这仍然迫使您使用完整的命名空间路径从#以外的其他名称空间调用#。要使用户命令实际可用,必须手动启用SALT:

⎕CY'salt' ⋄ enableSALT

为了避免工作空间和会话混乱,可以使用以下dfn:

{s←⎕NS ⍬ ⋄ 6::_←s.enableSALT ⋄ ⊢s.⎕CY'salt'}⍬

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45692159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档