3

我一直在尝试,SALT但遇到Load了似乎只影响原始功能训练的一致问题。我希望有任何关于确保所有功能Load正确的建议。

为了说明,在一个清晰的工作区中,我将创建一些用于转换十六进制和八进制的示例函数。有些是 dfns,有些是原始火车:

FromOct←8⊥⊢
ToOct←(FromOct⍣¯1)
FromHex←{16⊥⍵}
ToHex←{((16⊥⊢)⍣¯1)⍵}
HexToOct←ToOct FromHex

初始盐状态:
⎕SE.SALT.List '/path/to/salt'
Type Name Versions Size Last Update

然后Snap工作区:
⎕SE.SALT.Snap '/path/to/salt -clean -loadfn'

** WARNING: ⎕LX is empty
 #.FromHex  #.FromOct  #.HexToOct  #.ToHex  #.ToOct 

⎕SE.SALT.List '/path/to/salt -type'

 Type  Name      Versions  Size  Last Update         
 Fn    FromHex               25  2021/05/18 17:08:32 
 Fn    FromOct               25  2021/05/18 17:08:32 
 Fn    HexToOct              46  2021/05/18 17:08:32 
 Fn    ToHex                 36  2021/05/18 17:08:32 
 Fn    ToOct                 31  2021/05/18 17:08:32 
 Fn    load_ws              537  2021/05/18 17:08:32 

并检查load_ws函数正在导入什么:
⎕CMD 'cat /path/to/salt/load_ws.dyalog | grep "^ Load''"'

 Load'"/path/to/salt/FromHex" -target=#'       â #.FromHex
 Load'"/path/to/salt/FromOct" -target=#'       â #.FromOct
 Load'"/path/to/salt/HexToOct" -target=#'      â #.HexToOct
 Load'"/path/to/salt/ToHex" -target=#'         â #.ToHex
 Load'"/path/to/salt/ToOct" -target=#'         â #.ToOct

在一个清晰的工作区中,运行load_ws
⎕SE.SALT.Load '/path/to/salt/load_ws'
load_ws

*** could not fix "/path/to/salt/FromOct.dyalog"
*** could not fix "/path/to/salt/HexToOct.dyalog"
*** could not fix "/path/to/salt/ToOct.dyalog"

dfns 加载正常,火车失败。
一个现成的解决方法是使用 tradfns 或 dfns 进行包装,但这是非常不可取的。

关于让 SALT 正确加载这些功能的任何想法?
谢谢

4

1 回答 1

3

根据当前的 SALT 用户指南

名称类 3.3(原始或派生函数)和 4.3(原始或派生运算符)不能使用 SALT 进行操作——尝试这样做可能会导致数据丢失。

正如Paul Mansour 的评论中提到的,Dyalog Ltd. 建议从 SALT 过渡到 Link,尤其是在使用 Dyalog APL 版本 18.1 时,该版本将在未来几个月发布。但是,请注意,即使是Link 目前也不处理默认函数

不支持没有文本源的函数、运算符和命名空间(⎕NC3.3 或 4.3,即派生函数/运算符、序列和命名原语)。

与 SALT 不同,SALT 没有计划添加任何主要功能,这可能会在不久的将来发生变化。

虽然手动将默认函数包装在 tradfns 中很尴尬,但“Lazy”库使这变得轻而易举。

于 2021-05-18T21:53:54.377 回答