为什么 reduce 运算符不按我期望的方式工作?
Why does reduce operator does not work the way I expect it to?
我正在尝试在 Dyalog APL 中解决 Euler 18,但我无法理解为什么我的解决方案不起作用。
问题如下:
By starting at the top of the triangle below and moving to adjacent
numbers on the row below, the maximum total from top to bottom is 23.
3
7 4
2 4 6
8 5 9 3
That is, 3 + 7 + 4 + 9 = 23.
以我这样表示为例:
d ← (3 0 0 0) (7 4 0 0) (2 4 6 0) (8 5 9 3)
我正在尝试这样解决:
{⍵+((2⌈/⍺)),0}/⌽d
这给了我这个数组:22 19 15 0,其中较大的数字是 22,这不是问题的正确答案,应该是 23。
我遇到了这种情况(从左到右以便于阅读):
(2⌈/(8 5 9 3),0)+(2⌈/(2 4 6 0),0)+(2⌈/(7 4 0 0),0)+(2⌈/(3 0 0 0),0)
这给了我与函数相同的结果。
我期望的是这种行为(每个语句都直接替换到下一行):
(2⌈/(8 5 9 3)),0
(2 4 6 0)+8 9 9 0
(2⌈/(10 13 15 0)),0
(7 4 0 0)+13 15 15 0
(2⌈/(20 19 15 0)),0
(3 0 0 0) + 20 19 15 0
23 19 15 0
我想知道我在 APL 过程中哪里误解了导致与我期望的结果不同的结果。
谢谢!
/
以与您预期相反的方式工作 - 它从右到左通过数组求值。
F/a b c d
是 ⊂a F b F c F d
,或者带括号的 ⊂(a F (b F (c F d)))
.
删除 ⌽
并交换 ⍺
和 ⍵
后,您会得到 {⍺+(2⌈/⍵),0}/d
,这会给出您想要的结果。
我正在尝试在 Dyalog APL 中解决 Euler 18,但我无法理解为什么我的解决方案不起作用。
问题如下:
By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top to bottom is 23.
3
7 4
2 4 6
8 5 9 3
That is, 3 + 7 + 4 + 9 = 23.
以我这样表示为例:
d ← (3 0 0 0) (7 4 0 0) (2 4 6 0) (8 5 9 3)
我正在尝试这样解决:
{⍵+((2⌈/⍺)),0}/⌽d
这给了我这个数组:22 19 15 0,其中较大的数字是 22,这不是问题的正确答案,应该是 23。
我遇到了这种情况(从左到右以便于阅读):
(2⌈/(8 5 9 3),0)+(2⌈/(2 4 6 0),0)+(2⌈/(7 4 0 0),0)+(2⌈/(3 0 0 0),0)
这给了我与函数相同的结果。
我期望的是这种行为(每个语句都直接替换到下一行):
(2⌈/(8 5 9 3)),0
(2 4 6 0)+8 9 9 0
(2⌈/(10 13 15 0)),0
(7 4 0 0)+13 15 15 0
(2⌈/(20 19 15 0)),0
(3 0 0 0) + 20 19 15 0
23 19 15 0
我想知道我在 APL 过程中哪里误解了导致与我期望的结果不同的结果。
谢谢!
/
以与您预期相反的方式工作 - 它从右到左通过数组求值。
F/a b c d
是 ⊂a F b F c F d
,或者带括号的 ⊂(a F (b F (c F d)))
.
删除 ⌽
并交换 ⍺
和 ⍵
后,您会得到 {⍺+(2⌈/⍵),0}/d
,这会给出您想要的结果。