【问题标题】:How to split a number into its digits in APL如何在 APL 中将数字拆分为数字
【发布时间】:2017-07-08 18:16:30
【问题描述】:

在 APL 中,如何将整数或数字拆分为包含其数字的向量?最简洁(最短)的方法是什么?

【问题讨论】:

    标签: split numbers apl


    【解决方案1】:

    您可以使用以 10 为底的 Decode 的倒数:

    10⊥⍣¯1⊢
    

    由于Decode 会根据需要接收尽可能多的数字并对其进行解码,因此它的逆运算将接收一个数字并将其编码为所需的尽可能多的数字,

    或者,使用⎕IO←0,您可以尝试在数字向量中找到格式化数字的索引:

    ⎕D⍳⍕
    

    Demo for both solutions.

    这比 Encode 的丑陋使用更好

    {⍵⊤⍨10⍴⍨⌈10⍟1+⍵}
    

    【讨论】:

    • 为了完整起见,“老派”编码方法类似于(10⍴10)⊤1234567890 == 1 2 3 4 5 6 7 8 9 0
    • 这行得通,但是 做了什么(在您的第一个示例中)?我是 APL 的新手,据我所知,它会返回正确的参数(但这里没有?)。
    • @ed588 在那里将表达式完成为火车,因此您可以将其作为函数分配给变量(10 (⊥⍣¯1) ⊢)。 ⊥⍣¯1 本身就是一个函数,所以你需要以某种方式关联 10。
    • 那么这是否意味着f←10⊥⍣¯1⊢ (大致)等同于f←{10(⊥⍣¯1)⍵}
    • @ed588 不仅仅是粗略的;另一种常见的形式是(10∘⊥⍣¯1),这意味着(大致)“将 10 作为该函数的常量第一个参数”
    【解决方案2】:

    我在 APL2 中通过首先应用 FORMAT 然后执行 EACH 来做到这一点(尽管它可能仅限于正整数):

    ⍎¨⍕
    

    Try it online!

    【讨论】:

    • 这么简单(尽管可能效率低下),我从来没有想过它。另一个例子,说明在 APL 中总是有十几种方法来做同样的事情。
    【解决方案3】:

    不是最简洁的,但这样做的能力是在最早的 APL 中。 The 1962 book 展示了如何仅使用基本函数和矩阵乘法来处理位置数字系统:

    【讨论】:

      【解决方案4】:

      我显然尝试过这样做: a⊤⍨10×b÷b←⍳⌈10⍟a←⍵

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 2010-12-26
      相关资源
      最近更新 更多