孤独な奴
私の孤独を耽溺しているやつがいる。奴は私より大きいけど、私の部屋よりも小さい。奴は私の部屋の扉よりも大きいから、部屋の外に出ていけないように感じるが、半透明の長方形なので壁をすり抜け逃げていけそうだな、とも感じる。
宗教書
「旧約聖書」「新約聖書」「コーラン」「古事記」は、折を見て読まなければいけない古典だな、と思いつつも私はまだ読んでいない。これらの書を読んでいないと「話にならない」と言う人は世の中にたくさんのいるとおもう。「話にならないこと」が大きな問題なような気がするから共通理解の方法として、読みたくなくても、理解しなければならない本はある。読んでおけばそれを背理法の前提として受け入れて矛盾を指摘することで、逆手を取ることもできる。感銘を受けてしまったらどうしよう? それは芸術だ。私はその言葉を素晴らしい詩だと思うだろう。それは私が読書に求めていることの一つだ。無料で日本語訳が読めるようなのでここにリンクを貼っておく。
コーラン(あるいはイスラーム文化のホームページにもある)
クイックソート
HaskellとCommon Lispの勉強をコッソリ少しずつ進めている。Haskellでクイックソートが簡単に書けるのを知って嬉しい。このサイトのコードを貼り付ける。
-- haskell quicksort :: (Ord a) => [a] -> [a] quicksort [] = [] quicksort (x:xs) = let smallerSorted = quicksort [a | a <- xs, a <= x] biggerSorted = quicksort [a | a <- xs, a > x] in smallerSorted ++ [x] ++ biggerSorted
common lispでも同じようなやり方でクイックソートを書いてみた。
;; common lisp (defun quicksort (lst) (if (null lst) () (destructuring-bind (x . xs) lst (let ((smaller (loop for i in xs when (< i x) collect i)) (bigger (loop for i in xs when (>= i x) collect i))) (concatenate 'list (quicksort smaller) (list x) (quicksort bigger))))))
上で使われているdestructuring-bindは構造化代入というらしいが、このやり方を見つけられてよかった。common lispでも関数の入力を分解して定義本体の語彙として使える。
;; common lisp (defun fff (lst) (destructuring-bind (x . xs) lst (cons x (cons x xs))))
-- haskell fff (x:xs) = x:x:xs
上の2つは同じ。でもhaskellの方が簡潔だ。
※クイックソート2