Scalaでは本物の矢印記号が使える
以下のコードは等価である。
for (x <- 1 to 10) println(x)
for (x ← 1 to 10) println(x)
「<-」の代わりに「←」が使えるのだ。誰得。
2016-01-11 追記
「=>」の代わりに「⇒」も使えるようだ。ひぇぇ。
val f = (s: String) ⇒ println(s) // f: String => Unit = <function1>
PHPですべてをFにしたかった
すべてをFにしたかった結果
<?php require "F"; F('FFffFfF FFfffFF FFfFfff FFfFFFF Ffffff FfffFf FfFfFff FFfFfff FFffFfF Ffffff FfFffff FFffFfF FFFffFf FFffFFf FFffFfF FFfffFF FFFfFff Ffffff FffFffF FFfFFFf FFFffFF FFfFffF FFffFff FFffFfF FFFffFf FfFFFf FfFFFff FFfFFFf FfffFf FFFfFF FfFf');
The Perfect Insider.
最初の <?php と require を消す方法は何かないだろうか…。
あと小文字のfを使うのも妥協した。
やったこと
F = 1, f = 0 に見立てて、2進数 -> 10進数 -> 文字化して、最後にeval()しただけ。
F
<?php function F($str) { $str = str_replace('f', '0', $str); $str = str_replace('F', '1', $str); $ret = ""; foreach (explode(' ', $str) as $s) { $ret .= chr(bindec($s)); } eval($ret); }
F()に渡す文字列を作るのは、その逆をすればよい。
<?php $filepath = $argv[1]; $ret = []; foreach (file($filepath) as $line) { foreach (str_split($line) as $c) { $ret[] = decbin(ord($c)); } } $ret = implode(' ', $ret); $ret = str_replace('0', 'f', $ret); $ret = str_replace('1', 'F', $ret); echo $ret;
PHPで関数を返す関数を呼んで関数を呼びたかった(即時実行)
関数を返す関数を変数に入れて、直接呼びたい。
<?php $f = function ($x) { return function ($y) use ($x) { return $x + $y; }; }; echo $f(123)(234); //=> 357
PHP7
問題なし。
PHP5.6
syntax error, unexpected '('
怒られた。
他の動かない例
括弧したり変数に入れたり。
<?php echo ($f(123))(234); // syntax error, unexpected '(' echo ($f2 = $f(123))(234); // syntax error, unexpected '('
動いた例
変数に一旦入れた後、改めて呼べばいいんだけど、なんだか悔しい。
<?php $f2 = $f(123); echo $f2(234);
先輩PHPerからの教えによれば__invoke()を使えばいいとのこと。
<?php echo $f(123)->__invoke(234);
なるほど。(よくわからないけど動いた感)
見た目があれだけど、call_user_func()でも動くらしい。
<?php echo call_user_func($f(123), 234);