文句なし。こんな美しいものを私は今まで見たことがありません。無粋なことを言えば、遅延評価、無限リスト、パターンマッチのなせる技。--sumimfib = 1:1:[ a+b | (a,b) <- zip fib (tail fib) ] fib !! 9 => 55
思い付かないと度肝を抜かれるという意味で、あと、こうした定義を是としたのは(え〜と。ケント・ベックさんはとりあえずここでは黙っといてください(^_^;))おそらく Smalltalk がプログラミング言語史上初めてだろうということで、とりあえずこれをエントリー。--sumimUndefinedObject >> isNil ^ true Object >> isNil ^ false #something isNil => false nil isNil => true
SETF 。まあ、蓋を開けたときに分かるその実現方法の普通さはともかく、この“逆流感”が妙に心地よいのでエントリー。アラア・ケイのアイデアだとか。--sumim(setq x '(a b c)) x => (A B C) (setf (car x) NIL) x => (NIL B C)
無限多倍長精度、階乗がデフォルトで実装されている言語処理系は数あれど、! で起動できるのは(そして 100! 程度なんかじゃなくてもっと大きな数〜例えば最大の素数とか〜をメモりが許す限り本当に無限多倍長精度で計算でき 10 進数で出力できるやつは)Mathematica を置いて他にはないんじゃないかということでエントリー。--sumim100! => 9332621544394415268169923885626670049071596826438162\ 146859296389521759999322991560894146397615651828625369792082\ 7223758251185210916864000000000000000000000000
ようするに二次元リストの縦方向(サブリストの対応する要素)の和を求める式なんですが、リスト処理というパラダイムが持つ“パワー”というものをはじめて痛感できた一行。もちろん我らが Smalltalk も、Template Method パターンを用いて(つまり #+ を、配列間で対応する要素の和となるよう多態させることで)、data への sum の送信…というきわめて短い式でもって対抗できるわけですが、こと「普遍的性」という意味では Scheme の件の式の足下にも及ばないわけです。言語の圧倒的なパワー差とはこういうことをいうのでしょう。--sumim(apply map + data) ;; ただし data は '((1 2 3) (4 5 6) (7 8 9)) のとき => (12 15 18)
Perlメモ#特定の項目でソートする Schwartzian Transformです。関数言語では普通の処理なのかもしれませんが、これをPerlで実際にやるのはすごい話。Perl使いの憧れなのでエントリー。--naruse@data = map {$_->[0]} sort {$a->[2] <=> $b->[2]} map {[$_, split /,/]} @data;
このページを編集 (2681 bytes)
![]() |
以下の 1 ページから参照されています。 |
This page has been visited 5138 times.