5
4

5 回答 5

3

⎕SE.Dyalog.Utils.repObj

例如:

      x←2 3⍴⍳6
      x←1,⊂x
      x←x,⊂'foo'
      y←⎕SE.Dyalog.Utils.repObj x
      ]Display y
┌→─────────────────────┐
│1 (2 3⍴1-⎕io-⍳6) 'foo'│
└──────────────────────┘
      x≡⍎y
1

在线尝试!

于 2017-07-12T18:44:08.293 回答
3

在我看来,Execute & "transfer form" 并不是最优的解决方案,原因有很多:

  • 复杂的结构很快变得难以阅读
  • 与其他解决方案相比,Execute 是一个相对繁重/效率低下的调用工具
  • 如果您不小心,您就会面临“注入”攻击,即文件中的恶意代码应该包含常量但在应用程序启动时正在执行。

根据您的数据的样子,JSON 可能是一个不错的选择——它是专门为此设计的格式:

在 Dyalog 15.0 中:

       fromJSON←7159⌶ ⋄ toJSON←7160⌶ 
       (namespace←⎕NS '').life←42
       toJSON (⍳4) 'Hello' namespace
[[1,2,3,4],"Hello",{"life":42}]

JSON 的缺点是它不能表示更高维的数组。因此,如果您需要矩阵,则需要稍微按摩一下:

       toJSON ↓3 4⍴⍳12 
[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
       ↑fromJSON '[[1,2,3],[5,6,7]]'
1 2 3
5 6 7

在本月底发布的 16.0 版本中,实验性 I-Beams 已成为系统函数⎕JSON。

于 2017-06-03T12:26:09.427 回答
1

我不知道是否有办法用 ⍎ 做到这一点,但我会提到 Dyalog 版本 15.0 有 2 个 I-Beam 用于序列化和反序列化。

http://help.dyalog.com/15.0/Content/Language/Primitive%20Operators/Serialise%20Array.htm

例如

]disp x
┌→┬─────┬───┐
│1│0 1 2│foo│
│ │3 4 5↓   │
└─┴~───→┴──→┘

   y← 0(220⌶) 0(219⌶) 1(219⌶) 1(220⌶) x

  ]disp y
┌→┬─────┬───┐
│1│0 1 2│foo│
│ │3 4 5↓   │
└─┴~───→┴──→┘

      y ≡ x
1

此外,您可能想加入我们的论坛,因为如果您在那里提出问题,您会接触到更多的 Dyalog APL 用户。

http://www.dyalog.com/forum/

问候,

文斯

于 2017-05-31T14:15:57.930 回答
1
于 2017-05-30T09:41:00.797 回答
0

除非我遗漏了什么,否则解释器不提供保存和重建任何可能类型的变量的机制(命名空间、对象、对这些变量的引用等都非常复杂)。“序列化”可能是最接近的,但是(a)它不是人类可读的,(b)它更像是一种解释器机制而不是应用程序开发人员的工具,所以我什至不想进一步谈论它 - 有更好的方法处理那个;)

但是,有一个用户命令可以让你这样做:

]save (Object) (Filename)

所以

]save x h:\temp\x

将其保存到 unicode 文件 h:\temp\x.dyalog 也可以使用任何支持 Unicode 的编辑器(甚至)编辑 h:\temp\x.dyalog )。

通过做

]load h:\temp\x

您可以将该对象加载到工作区中。或者,使用

]xyz←load h:\temp\x -noname

将值分配给xyz而不是再次加载x

还有更多......我认为您的问题是希望能够重现一些数据的结果。您是否知道“组件文件系统”,它提供了一种简单的方法来保存变量(如x文件)并从那里重新加载它们?例子:

{x ⎕fappend ⍵ ⋄ ⎕FUNTIE ⍵}'h:\temp\x'⎕FCREATE 0

保存x然后

{r←⎕fread ⍵,1 ⋄ ⎕FUNTIE ⍵ ⋄ r}'h:\temp\x'⎕FTIE 0

再读一遍。(免责声明:这些示例过于简单化,因为如果您正在创建的文件已经存在等情况下没有错误处理 - 通常也需要注意,但这对于这个小东西来说太过分了样本...)

所以,最后,我认为我真正关心的是这个问题的背景以及你想要达到的目的。在我的整个 APL 生活中,我很少看到“不可行”的事情——但有时路径与你所期望的不同(了解其他语言)......

于 2017-05-31T07:13:59.597 回答