Upgrade to Pro — share decks privately, control downloads, hide ads and more …

curry.php

 curry.php

A functional programming using php.

Kazunori Otani

March 29, 2014
Tweet

More Decks by Kazunori Otani

Other Decks in Technology

Transcript

  1. DVSSZQIQ
    [email protected]@XFEEJOH
    !LBU[DIBOH

    View Slide

  2. 21)1͸޷͖Ͱ͔͢ʁ

    View Slide

  3. !LBU[DIBOH

    View Slide

  4. 21)1͸޷͖Ͱ͔͢ʁ

    View Slide

  5. ʊਓਓਓਓਓਓਓਓਓਓਓਓਓʊ
    ʼɹಥવ4USJOH͕*OUʹมΘΔɹʻ
    ʉ:?:?:?:?:?:?:?:?:?:ʉ

    View Slide

  6. ʮྫ͑͹ɺ1)1Λආ͚Δʯ

    View Slide

  7. IUUQKBXJLJQFEJBPSHXJLJ&&"&"&"#[email protected]@DSPQQFEKQH

    View Slide

  8. 1)1JTBCPVUBTFYDJUJOHBTZPVSUPPUICSVTI
    :PVVTFJUFWFSZEBZ JUEPFTUIFKPC
    JUJTBTJNQMFUPPM TPXIBU
    [email protected]

    View Slide

  9. 「PHPは、歯ブラシみたいなものですね。
    毎日使うものですけど、だから何でしょう?」
    IUUQBOPOEIBUFMBCPKQ

    View Slide

  10. View Slide

  11. +BWBͱൺֱ

    View Slide

  12. ແ໊ؔ਺͕͋Δ
    ˞+BWBҎલͱͷൺֱ

    View Slide

  13. $f = function($a, $b) {
    return $a + $b;
    };
    echo $f(2,3); // => 5

    View Slide

  14. $f = (function($a, $b) {
    return $a * $b;
    })(2,3); // FAIL!!!

    View Slide

  15. $fib = function($x) {
    return $x < 2
    ? $x
    : $fib($x-1) + $fib($x-2);
    }));
    echo $fib(6); // FAIL!!

    View Slide

  16. ΧϦʔԽ

    View Slide

  17. IUUQTHJTUHJUIVCDPNLBU[DIBOH

    ˞༵ۚ೔ޕޙͰ͢

    View Slide

  18. $f = F::curry(
    function($_) {
    return $_[0] + $_[1];
    });
    echo $f->_(2)->_(3)->_();

    View Slide

  19. IUUQTHJTUHJUIVCDPNBKJZPTIJWH
    CBECEF
    ˞༵ۚ೔ޕޙͰ͢

    View Slide

  20. $c = curry(
    function($a, $b){
    return $a + $b;
    });
    echo $c->_(2)->_(3);

    View Slide

  21. function YComb($f) {
    $yc = curry(
    function($y, $x)
    use ($f) {
    return $f($y($y), $x);
    });
    return $yc($yc);
    }

    View Slide

  22. echo (YComb(curry(
    function($f, $x){
    return $x < 2
    ? $x
    : $f($x-1) + $f($x-2);
    })))->_(6);

    View Slide

  23. ʮ͜Ε͸ɺࣃϒϥγͱͯ͠΋࢖͍෺ʹͳΔϨϕϧʯ

    View Slide

  24. -PWFZPVS1)1

    View Slide

  25. View Slide