默认写{(+/3<???6)×100÷?}1000

Fel*_*bek 6 apl pointfree tacit-programming

受到一些 Conor Hoekstra YouTube 视频的启发,我尝试在 APL 中做一些小步骤,并将我的小线条转换为无点样式。但对于这个(1000 个骰子 6 卷中 4、5 或 6 卷的百分比)我无法理解如何在重塑之前消除 omega。

\n

{(+/3<?\xe2\x8d\xb5\xe2\x8d\xb46)\xc3\x97100\xc3\xb7\xe2\x8d\xb5}1000

\n

Adá*_*dám 9

让我们一步一步来:

\n

{(+/3<?\xe2\x8d\xb5\xe2\x8d\xb46)\xc3\x97100\xc3\xb7\xe2\x8d\xb5}

\n

首先,我们需要将使用参数的函数的每个部分表示为参数函数。乘法结合了两个主要部分:

\n

{+/3<?\xe2\x8d\xb5\xe2\x8d\xb46}\xc3\x97{100\xc3\xb7\xe2\x8d\xb5}

\n

在最右边的部分,{100\xc3\xb7\xe2\x8d\xb5}我们需要参数。我们可以通过以下几种方法来处理这个问题:

\n
    \n
  1. 我们可以用恒等函数 \xe2\x8a\xa2来表示:100\xc3\xb7\xe2\x8a\xa2
  2. \n
  3. 我们可以将左参数绑定(又名柯里化)到生成一元函数的100函数:\xc3\xb7100\xe2\x88\x98\xc3\xb7
  4. \n
\n

让我们采用最后一种方法:

\n

{+/3<?\xe2\x8d\xb5\xe2\x8d\xb46}\xc3\x97100\xe2\x88\x98\xc3\xb7

\n

在左边的部分,{+/3<?\xe2\x8d\xb5\xe2\x8d\xb46}我们可以做同样的事情,但需要注意两件事,每件事都可以用几种不同的方式处理:

\n
    \n
  1. 我们有一个常量 ,6作为函数最右边的部分。\n
      \n
    1. 我们可以将常数变为常数函数6\xe2\x8d\xa8
    2. \n
    3. 我们可以交换(也称为交换或切换)参数\xe2\x8d\xb4并使用恒等函数:6\xe2\x8d\xb4\xe2\x8d\xa8\xe2\x8a\xa2
    4. \n
    5. 我们可以将正确的参数 绑定6\xe2\x8d\xb4生成一元函数的函数:\xe2\x8d\xb4\xe2\x88\x986
    6. \n
    \n
  2. \n
  3. 我们有一个一元函数,?中间
      \n
    1. 我们可以? 在上面 \xe2\x8d\xb4编写:?\xe2\x8d\xa4\xe2\x8d\xb4
    2. \n
    3. 我们可以? 在旁边 <写:<\xe2\x88\x98?
    4. \n
    \n
  4. \n
\n

让我们对每个问题采用最​​后一种方法:

\n

(+/3<\xe2\x88\x98?\xe2\x8d\xb4\xe2\x88\x986)\xc3\x97100\xe2\x88\x98\xc3\xb7

\n

这完全默认等同于一元函数{(+/3<?\xe2\x8d\xb5\xe2\x8d\xb46)\xc3\x97100\xc3\xb7\xe2\x8d\xb5}。然而,我们还可以使用另一种技巧来消除括号。自从\xc3\x97是可交换的,我们可以交换它的参数,将更复杂的表达式放在右侧:

\n

100\xe2\x88\x98\xc3\xb7\xc3\x97(+/3<\xe2\x88\x98?\xe2\x8d\xb4\xe2\x88\x986)

\n

+/然而,现在我们遇到了中间的一元问题。观察一下,<右侧有一个向量,左侧有一个标量。对于F/s G v标量函数F以及G标量s和向量v的内 s F.G v是等效的,因此我们可以将求和与比较结合起来,如下所示:

\n

100\xe2\x88\x98\xc3\xb7\xc3\x973+.<\xe2\x88\x98?\xe2\x8d\xb4\xe2\x88\x986

\n

或者,我们可以观察到求和相当于以 1 为底的求值,因为以 1 为底的位值是 (\xe2\x80\xa6,1 2 , 1 1 , 1 0 ) = (\xe2\x80\xa6, 1, 1, 1) 所以如果我们有列表 (\xe2\x80\xa6, c , b , a ) 并将其计算为以 1 为基数的数字,我们会得到:

\n

(\xe2\x80\xa6 + c \xc3\x971 2 + b \xc3\x971 1 + a \xc3\x971 0 ) =
\n(\xe2\x80\xa6 + c \xc3\x971 + b \xc3\ x971 + a \xc3\x971 0 ) =
\n(\xe2\x80\xa6 + c + b \xc3\x971 + a \xc3\x971) =
\n(\xe2\x80\xa6 + c + b + a

\n

也就是说,我们的列表的总和。我们可以将其写为:

\n

100\xe2\x88\x98\xc3\xb7\xc3\x971\xe2\x8a\xa53<\xe2\x88\x98?\xe2\x8d\xb4\xe2\x88\x986

\n