programming

map (LMNtal)

ふとしたきっかけで LMNtal map関数のつもり. map(f, [1,2,3], result).f(X, R) :- R=X+1. map(f, [X|XS], R) :- YS=map(f, XS), f(X, Z), R=[Z|YS]. map(f, [], R) :- R=[]. 追記:コメントいただきました.汎用的な map はコメント参照.

コインを減らす払い方

コインを減らす払い方 (どう書く?org) いま、あなたの財布の中にはコインがたくさん入っています。これを少しでも減らしたいと思います。支払うべき金額と持っているコインの種類と数を与えられたときに、どのコインを何枚出せばおつりを受け取った後のコイ…

ハノイの塔

OCaml で手続き的に書いてみる. ハノイの塔hanoi' が実質計算します.型合わせていったらできたけどぐちゃぐちゃになりました. あまり説明する気も,かといって綺麗に書き直す気もおきません.解き方はセオリーどうり 1. n-1個を a から c を使って b に移…

逆ポーランド計算機

S式ストリームパーサ版を作ろうと思って書いてたら id:mzp が書いてしまったので方向転換. 逆ポーランド計算機 #load "camlp4o.cma" type token = Op of string | Num of int let lexer = Genlex.make_lexer ["+"; "-"; "*"; "/"]let rec parse = parser | […

超簡単S式計算機

ここの問題 よりまた一問解いてみる.四則演算のみが使えるS式を解釈して結果を出力するプログラムを書け。入力例:(+ 1 2) => 3 (* (+ 2 3) (- 5 2)) => 15ということで ocamlyacc で書いてみる.(ちょっと大掛かりすぎか?) 入力例は2引数になってるけど,一…

しりとり

なんか煮詰まったので息抜きに ここの問題 をひとつ解いてみる.しりとり: 1. 文字列のリストの要素全てを使ってしりとりが完結するかを判定 2. 最長のしりとりを出力とりあえずいけるところまでしりとりさせる. OCaml でやろうかと思ったけどバックトラッ…

組み合わせ

前回の改良バージョンを眺めていると組み合わせも簡単に作れることに気付く. takeOne のときに 前半を捨ててしまえばよさそうだ. takeOne' :: [a] -> [(a, [a])] takeOne' [] = [] takeOne' (x:xs) = (x, xs) : takeOne' xscomb :: Int -> [a] -> a comb _…

順列

順列をリストモナドでどう書くのだろう,と,ふと思いたち書いてみた. remove _ [] = [] remove x (y:ys) = if x == y then ys else y : (remove x ys)perm _ [] = [[]] perm 1 l = do x <- l return [x] perm n l = do x <- l xs <- perm (n - 1) (remove …

Java の assert 文

Java の assert 文の使い方. assert expr; assert expr : message;の形で書くらしい.テスト. public class Test { public static void main(String[] args) { assert false; } }コンパイルは, $ javac -source 1.4 Test.javaassertion を有効にして実行…

{OpenGrok

クロスリファレンサです. Tomcat で動きます.Mac OS X 10.4.9 で実験してみました.コンパイルAnt の JFlex タスクが必要です. JFlex ここから落としてきて展開. lib/JFlex.jar を Ant 実行時のクラスパスが通るところに置きます.あとは, $ ant webapp…

RailsCasts

Ruby on Rails のチュートリアルみたいなことが PodCastで配信されています. RailsCasts・一動画一トピックで短時間 ・実際のプログラミングしている映像を使って説明されている ・更新期間が短い(2?3日に一回更新?) のように手軽に気軽に勉強できていい感…

CDuce

CDuce は OCaml で実装された XML 変換言語です. Ocaml の構文を拡張しています.インストールFreeBSD にインストール. # portinstall devel/pcre-utf8 このとき pcre (utf8無し?) と conflict したため消去 # pkg_delete -f pcre-6.6_1 f は依存するパッ…

Lucene

結構簡単に作れそうです. Lucene のインデックスの構造 インデックスはドキュメントから成ります. ドキュメントは"メール文書"とか"Webページ"とか,ある構造を持つ一つの文書であると考えればよいか? ドキュメントはフィールドから成ります. さらにフィ…

plagger

Plagger 使ってみました. Mac OS X なら Plagger を簡単にインストールする これを展開するだけです.インストール$ curl -O http://8-p.info/Plagger/Plagger-Mac-0.7.11-2.tar.gz $ tar zxvf Plagger-Mac-0.7.11-2.tar.gz $ mv Plagger-Mac-0.7.11-2.tar.…

tuareg-mode

OCaml のための Emacs のモードです. 本家.ダウンロードはこちらから基本的なキーバインドC-c C-e 評価 C-c C-b バッファを評価 C-c C-r リージョン内を評価 M-; コメント. マークしているときはリージョン内をコメントアウト