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{(+/3<?\xe2\x8d\xb5\xe2\x8d\xb46)\xc3\x97100\xc3\xb7\xe2\x8d\xb5}
首先,我们需要将使用参数的函数的每个部分表示为参数的函数。乘法结合了两个主要部分:
\n{+/3<?\xe2\x8d\xb5\xe2\x8d\xb46}\xc3\x97{100\xc3\xb7\xe2\x8d\xb5}
在最右边的部分,{100\xc3\xb7\xe2\x8d\xb5}我们需要参数。我们可以通过以下几种方法来处理这个问题:
\xe2\x8a\xa2来表示:100\xc3\xb7\xe2\x8a\xa2100函数:\xc3\xb7100\xe2\x88\x98\xc3\xb7让我们采用最后一种方法:
\n{+/3<?\xe2\x8d\xb5\xe2\x8d\xb46}\xc3\x97100\xe2\x88\x98\xc3\xb7
在左边的部分,{+/3<?\xe2\x8d\xb5\xe2\x8d\xb46}我们可以做同样的事情,但需要注意两件事,每件事都可以用几种不同的方式处理:
6作为函数最右边的部分。\n\n?中间\n让我们对每个问题采用最后一种方法:
\n(+/3<\xe2\x88\x98?\xe2\x8d\xb4\xe2\x88\x986)\xc3\x97100\xe2\x88\x98\xc3\xb7
这完全默认等同于一元函数{(+/3<?\xe2\x8d\xb5\xe2\x8d\xb46)\xc3\x97100\xc3\xb7\xe2\x8d\xb5}。然而,我们还可以使用另一种技巧来消除括号。自从\xc3\x97是可交换的,我们可以交换它的参数,将更复杂的表达式放在右侧:
100\xe2\x88\x98\xc3\xb7\xc3\x97(+/3<\xe2\x88\x98?\xe2\x8d\xb4\xe2\x88\x986)
+/然而,现在我们遇到了中间的一元问题。观察一下,<右侧有一个向量,左侧有一个标量。对于F/s G v标量函数F以及G标量s和向量v的内积 s F.G v是等效的,因此我们可以将求和与比较结合起来,如下所示:
100\xe2\x88\x98\xc3\xb7\xc3\x973+.<\xe2\x88\x98?\xe2\x8d\xb4\xe2\x88\x986
或者,我们可以观察到求和相当于以 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)
也就是说,我们的列表的总和。我们可以将其写为:
\n100\xe2\x88\x98\xc3\xb7\xc3\x971\xe2\x8a\xa53<\xe2\x88\x98?\xe2\x8d\xb4\xe2\x88\x986