受Conor Hoekstra YouTube视频的启发,我尝试在APL中做一些小步骤,并将我的小线条转换为无点风格。但对于这个(1000个die-6卷中4、5或6卷的百分比(,我无法理解如何在整形前消除ω。
{(+/3<?⍵⍴6)×100÷⍵}1000
让我们一步一步来:
{(+/3<?⍵⍴6)×100÷⍵}
首先,我们需要将使用参数的函数的每一部分表示为的函数。乘法结合了两个主要部分:
{+/3<?⍵⍴6}×{100÷⍵}
在最右边的部分,{100÷⍵}
,我们需要这个论点。我们有几种方法可以处理这个问题:
- 我们可以使用身份函数
⊢
来表示它:100÷⊢
- 我们可以将左参数
100
绑定(也称为curry(到函数÷
,从而生成一元函数:100∘÷
让我们采取最后一种方法:
{+/3<?⍵⍴6}×100∘÷
在左边的部分{+/3<?⍵⍴6}
中,我们可以做同样的事情,但需要注意两件事,每件事都可以用几种不同的方式处理:
- 我们有一个常数
6
,作为函数的最右边部分。- 我们可以把常数变成一个常数函数:
6⍨
- 我们可以转换(也称为交换或切换(
⍴
的参数,并使用一个身份函数:6⍴⍨⊢
- 我们可以将正确的自变量
6
绑定到函数⍴
,从而生成一元函数:⍴∘6
- 我们可以把常数变成一个常数函数:
- 我们有一个一元函数
?
,在中间。- 我们可以在
⍴
:?⍤⍴
上合成?
- 我们可以在
<
的旁边组合?
:<∘?
- 我们可以在
让我们对每个问题采取最后一种方法:
(+/3<∘?⍴∘6)×100∘÷
这是一个完全隐含的等价于一元函数{(+/3<?⍵⍴6)×100÷⍵}
。然而,还有一个技巧可以用来消除括号。由于×
是可交换的,我们可以交换它的自变量,将更复杂的表达式放在右边:
100∘÷×(+/3<∘?⍴∘6)
然而,现在我们有一个问题,一元+/
在中间。观察<
在右边看到一个向量,在左边看到一个标量。在标量函数F
和G
的F/s G v
与标量s
和向量v
的情况下,内积s F.G v
是等价的,因此我们可以将求和与比较组合如下:
100∘÷×3+.<∘?⍴∘6
或者,我们可以观察到求和等价于在基1中的求值,因为在基1的位置值是(…,12,11、10(=(…,1,1(,所以如果我们有列表(…,c,b、a(,并将其作为基1的数字求值,我们得到:
(…+c×12+bx 1a?10(=
(…+c+b+a(
也就是我们列表的总和。我们可以这样写:
100∘÷×1⊥3<∘?⍴∘6