【发布时间】:2018-09-02 03:56:30
【问题描述】:
这是 Dyalog APL 中黄金比例的代码:
1+∘÷⍣=1
我不明白。 “1 plus compose rec repeat 等于 1”没有任何意义。
【问题讨论】:
标签: apl
这是 Dyalog APL 中黄金比例的代码:
1+∘÷⍣=1
我不明白。 “1 plus compose rec repeat 等于 1”没有任何意义。
【问题讨论】:
标签: apl
⍣ 的操作数是+∘÷(左)和=(右)。它的参数都是1。
⍣ 的函数右操作数是“直到”,它重复左操作数,直到右操作数(使用最后两个结果调用)给出1。所以,这里⍣= 是“重复直到相等”——找到不动点。
⍣ 使用与其左参数相同的左参数调用其左操作数(所以总是1),但用新结果循环右操作数。
所以,+∘÷ 被称为 dyadically,这与 dfn {⍺ + ÷⍵} 相同。 ⍺ 这里总是相同的 1,因为这是 ⍣ 的左参数。
总之,这段代码执行1 + ÷last,直到最后一个结果和这个相等。 Try it online!
Dyalog APL ]box on -trains=tree:
⍣
┌┴┐
∘ =
┌┴┐
+ ÷
【讨论】:
]box 的选项,所以只需]box on 就足够了
倒数被单子应用于右操作数,结果被添加到左操作数。 10+∘÷4 → 10.25 和 1+∘÷1 → 2。
当我们重复一个二元函数时,右操作数被“更新”,但左操作数保持不变。 1+∘÷⍣2⊢1 → 1+∘÷2 → 1.5
一次又一次地重复,只要(当前结果)f(上一个结果)为假。这样,⍣= 会重复直到收敛,就像“∞ 次”一样。
【讨论】:
现在我明白了,谢谢你!让我总结一下! x+∘÷y 是复合函数。首先,您计算 1/y,然后,它由加法组成,并加上 x。现在,这就是我们喜欢酸糖(他总是皱着眉头)重复的家伙进来的地方!一个测试: 1 (+⍣10) 1. 他从 1 开始,然后加 1,并在结果中再次这样做,直到他这样做十次。如果10变成=,他会在之前的结果等于现在的结果时停止! x (f⍣u) y,在这种情况下,将有 x, f, u 和 y,分别为 1,+∘÷,= 和 1。我认为这种“倒数 + 1”方法是一种经典方法。
【讨论】: