问题描述
我一直在试验 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 正确加载这些类型的函数?
谢谢
解决方法
根据the current SALT User Guide:
? Nameclasses 3.3(原始或派生函数)和 4.3(原始或派生运算符)不能使用 SALT 操作 - 尝试这样做可能会导致数据丢失。
如Paul Mansour's comment中所述,Dyalog Ltd. 建议从 SALT 过渡到 Link,尤其是在使用 Dyalog APL 版本 18.1 时,该版本将于未来几个月发布。但是,请注意,即使是 Link does not currently handle tacit functions:
不支持没有文本源的函数、运算符和命名空间(3.3 或 4.3 的 ⎕NC
,即派生函数/运算符、训练和命名原语)。
与 SALT 不同,SALT 没有计划添加任何主要功能,这可能会在不久的将来发生变化。
虽然手动将默认函数包装在 tradfns 中很尴尬,但 “Lazy” library 使这变得轻而易举。