如何将任何Dyalog APL值转换为可以传递给以获得相同值的字符向量?

预期效果如何:

      x←2 3⍴⍳6
      x←1,⊂x
      x←x,⊂'foo'
      y←desired_function x
      DPX y
┌→─────────────────┐
│1,(⊂2 3⍴⍳6),⊂'foo'│
└──────────────────┘
      x≡⍎y
1

更新

想法是将值转换为可人工编辑的APL源代码,以便在发现新的有问题的场景时将其插入到单元测试功能中。我希望这些测试方案在APL源代码中而不在文件中,因为在我使用的框架中,源代码由版本控制系统很好地管理,而文件则没有。而且我希望它可以被人类编辑,而不仅仅是序列化,以便在参数/结果发生变化时更轻松地修改现有的测试方案。

最佳答案

我认为,由于多种原因,执行和“转移表格”不是最佳解决方案:

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

  • 根据您的数据的样子,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型束已成为系统功能⎕JSON。

    关于apl - Dyalog APL中的"APL Object Notation",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44243094/

    10-14 20:22