回想一下K組合函數是一個常量函數。它總是返回第一個參數:如何在魔法森林中創建K combinator? (模擬一隻知更鳥)
Kxy = x for all y
在書中嘲笑一隻知更鳥作者提出含說話的鳥兒的魔法森林的一個例子。這些鳥的行爲如下:
給定鳥類A和鳥類B,如果你將B的名字叫做A,那麼A將通過向你呼叫某隻鳥的名字作出迴應:這隻鳥我們將由AB指定。
假設森林由三隻鳥類A,B和C組成。是否有可能至少有一隻鳥的行爲像K combinator?
下面是一個表格,顯示了一個可能的一組可能的行爲,用於迷人森林中的鳥類。第一欄有森林裏每隻鳥的名字。最上面一行的名字可能會被呼叫給每隻鳥。身體是鳥類對名稱的迴應。例如,如果您向鳥A發出A的名字,那麼鳥A將以C作爲迴應(參見第2行第2列)。簡單地說,AA = C。如果你向鳥A叫出B的名字,那麼鳥A將以B作爲迴應(見第2行第3列)。簡而言之,AB = B。應該爲AC的空插槽輸入什麼值?
| A B C
------------------
A | C B
B | B B B
C | A A A
讓我們看看我們是否可以讓鳥A像K組合器那樣工作。上述一組數值看起來很有希望:
對於所有y,AA = C且Cy = A。也就是說,對於所有y,(AA)y = A。
對於所有y,AB = B和By = B。也就是說,對於所有的y,(AB)y = B。
什麼值應放在空插槽(AC)?考慮所有的情況:
如果AC = A然後Ay的值必須是下所有的Y,這顯然是 假。因此A不能是空槽的正確值。
如果AC = B,則對於所有y,By的值必須是C,這顯然是 false。因此B不能是空槽的正確值。
如果AC = C,則對於所有y,Cy的值必須是C,這顯然是錯誤的 。因此C不能是空槽的正確值。
因此,對於每個y,沒有值可以置於空槽中以滿足條件(AC)y = C。
據我所知,這是不可能的,使任何鳥類行爲像一個K combinator。我希望你能證明我錯了。
是不是C(如常量)K combinator已經? – Ingo
B是常數函數KB,C是常數函數KA,但K組合器都不是。 –
你的問題的第一句話是不正確的。 K組合器不是一個常量函數,儘管它產生了常量函數作爲輸出。 –