vieweditattachhistoryswikistopchangessearchhelp

この一行は絶対無二の一行なり

sumim が、Haskell のフィボナッチ数列に感動したので、この言語ならでは…という一行+αをメモする場所。なんか気を付けないと「私の頭を悩ませた、この一行…」になる恐れも…(^_^;)。--sumim

Haskell

fib = 1:1:[ a+b | (a,b) <- zip fib (tail fib) ]

fib !! 9 => 55
文句なし。こんな美しいものを私は今まで見たことがありません。無粋なことを言えば、遅延評価、無限リスト、パターンマッチのなせる技。--sumim

Smalltalk

UndefinedObject >> isNil
	^ true

Object >> isNil
	^ false

#something isNil => false
nil isNil => true
思い付かないと度肝を抜かれるという意味で、あと、こうした定義を是としたのは(え〜と。ケント・ベックさんはとりあえずここでは黙っといてください(^_^;))おそらく Smalltalk がプログラミング言語史上初めてだろうということで、とりあえずこれをエントリー。--sumim

LISP

(setq x '(a b c))
x => (A B C)
(setf (car x) NIL)
x => (NIL B C)
SETF 。まあ、蓋を開けたときに分かるその実現方法の普通さはともかく、この“逆流感”が妙に心地よいのでエントリー。アラア・ケイのアイデアだとか。--sumim

Mathematica

100! => 9332621544394415268169923885626670049071596826438162\
146859296389521759999322991560894146397615651828625369792082\
7223758251185210916864000000000000000000000000
無限多倍長精度、階乗がデフォルトで実装されている言語処理系は数あれど、! で起動できるのは(そして 100! 程度なんかじゃなくてもっと大きな数〜例えば最大の素数とか〜をメモりが許す限り本当に無限多倍長精度で計算でき 10 進数で出力できるやつは)Mathematica を置いて他にはないんじゃないかということでエントリー。--sumim

Scheme

(apply map + data)  ;; ただし data は '((1 2 3) (4 5 6) (7 8 9)) のとき
=> (12 15 18)
ようするに二次元リストの縦方向(サブリストの対応する要素)の和を求める式なんですが、リスト処理というパラダイムが持つ“パワー”というものをはじめて痛感できた一行。もちろん我らが Smalltalk も、Template Method パターンを用いて(つまり #+ を、配列間で対応する要素の和となるよう多態させることで)、data への sum の送信…というきわめて短い式でもって対抗できるわけですが、こと「普遍的性」という意味では Scheme の件の式の足下にも及ばないわけです。言語の圧倒的なパワー差とはこういうことをいうのでしょう。--sumim


naruse さん編


Perl

@data = map {$_->[0]}
            sort {$a->[2] <=> $b->[2]}
                 map {[$_, split /,/]} @data;
Perlメモ#特定の項目でソートする Schwartzian Transformです。関数言語では普通の処理なのかもしれませんが、これをPerlで実際にやるのはすごい話。Perl使いの憧れなのでエントリー。--naruse

このページを編集 (2681 bytes)


Congratulations! 以下の 1 ページから参照されています。

This page has been visited 5151 times.