查看完整版本 : Y combinator

xianrenb 2017-12-9 01:53 PM

Y combinator

知道數學上有一樣東西叫 Y combinator 。
[url=https://en.wikipedia.org/wiki/Fixed-point_combinator]https://en.wikipedia.org/wiki/Fixed-point_combinator[/url]

基本上次次睇翻解釋都睇唔明。
但再看點用又覺得好似無乜用,如:
[url=http://rosettacode.org/wiki/Y_combinator#JavaScript]http://rosettacode.org/wiki/Y_combinator#JavaScript[/url][code]var fac = Y(function(f) {
    return function (n) {
        return n > 1 ? n * f(n - 1) : 1;
    };
});[/code]但呢次見到 [url]http://snap.berkeley.edu/[/url] 有個 y combinator example :
[url=http://snap.berkeley.edu/snapsource/snap.html#present:Username=jens&ProjectName=y%20combinator]http://snap.berkeley.edu/snapsource/snap.html#present:Username=jens&ProjectName=y%20combinator[/url]
初初都唔知搞乜鬼。
後來才知,要 click 上方的 icon minimize 中間幅圖。
然後 click 左上角的 control icon 。
再在左下角的 Y icon 右 click 後選 edit 才能見到 Y 的定義。
看上去是與前面網頁描述完全不同的定義。
大家認為這個 Snap! project 中的 Y combinator 定義是否錯誤呢?
同時,看來這個 Snap! 平台,看來已經完全超出小朋友拿來玩的程度了。
d project d code 好複雜,反而讓人感覺一點也不好玩。

Susan﹏汪汪 2017-12-9 02:06 PM

以前寫過
好似係C++

冇記錯的話strong typed language 係唔能夠用FP寫法implement

Fixed-point combinator係用來寫recursive function

[[i] 本帖最後由 Susan﹏汪汪 於 2017-12-9 02:19 PM 編輯 [/i]]

Susan﹏汪汪 2017-12-9 02:27 PM

[code]var fac = Y(function(f) {
    return function (n) {
        return n > 1 ? n * f(n - 1) : 1;
    };
});[/code]

搞清楚會易明好多

呢段code係用左Y combinator去寫一個recursive function

但wiki集中講的不是點用Y combinator去寫recursive function

而係講緊Y combinator本身點implement
同上面段code講點使用Y combinator係不相關

xianrenb 2017-12-9 02:32 PM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2017-12-9 02:06 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=472133864&ptid=27111425][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
以前寫過
好似係C++

冇記錯的話strong typed language 係唔能夠用FP寫法implement

Fixed-point combinator係用來寫recursive function [/quote]

或者而家明白了:
[url=https://en.wikipedia.org/wiki/Fixed-point_combinator]https://en.wikipedia.org/wiki/Fixed-point_combinator[/url]
[quote]...In the lambda calculus it is not possible to refer to the definition of a function in a function body. Recursion may only be achieved by passing in a function as a parameter....[/quote]

我現在的理解是,有 d programming language define function 時,其 function 內容不可以直接 call 番正在 define 的 function 。
但 call 其他 parameter (as a function )就得。

那麼,對於大部份程式語言而言,真的沒有有意義的用途。
因為用正常直接 recursion 方法就得。

[[i] 本帖最後由 xianrenb 於 2017-12-9 02:34 PM 編輯 [/i]]

Susan﹏汪汪 2017-12-9 02:39 PM

[quote]原帖由 [i]xianrenb[/i] 於 2017-12-9 02:32 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=472134878&ptid=27111425][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]


或者而家明白了:
https://en.wikipedia.org/wiki/Fixed-point_combinator


我現在的理解是,有 d programming language define function 時,其 function 內容不可以直接 call 番正在 define 的 function  ... [/quote]


例如Haskell 就需要呢個Y combinator
頁: [1]
查看完整版本: Y combinator