このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1362715265/18
:- dynamic(todo/1).

'お題 
こんな感じにコマンドラインで動くTODO管理アプリを作りなさい 

$ ./todo add "本屋でPythonの本を買ってくる" 
$ ./todo add "たいやきを買ってくる" 
$ ./todo list 
1: 本屋でPythonの本を買ってくる 
2: たいやきを買ってくる 
$ ./todo done 2 
$ ./todo list 
1: たいやきを買ってくる 

アドリブも可' :-
        todoを準備する,
        user_parameters(_パラメーター),
        解析実行(_パラメーター),
        todoデータを保存する.

解析実行([add,_文字列]) :-
        assertz(todo(_文字列)),!.
解析実行([done,N]) :-
        'N行目のtodoデータを削除する'(N).
解析実行([list]) :-
        行番号を振ってtodoデータを表示する.

'N行目のtodoデータを削除する'(N) :-
        一旦todoデータを削除しながらリストに取得し(L1),
        'N番目の要素を削除して'(N,L1,L2),
        todoデータを定義し直す(L2).
        
一旦todoデータを削除しながらリストに取得し(L) :-
        findall(_データ,(
                    retract(todo(_データ)),
                L).

'N番目の要素を削除して'(N,L1,L2) :-
        length([_|L0],N),
        append(L0,[_|R],L1),
        append(L0,R,L2).

todoデータを定義し直す(L2) :-
        forall(
                member(_データ,L2),
                assertz(todo(_データ))).

行番号を振ってtodoデータを表示する :-
        findall(_データ,todo(_データ),L),
        forall((
                    nth1(No,L,_データ),
               writef('%t %t\n',[No,_データ]).

todoデータを準備する :-
        reconsult('todo.pro').

todoデータを保存する :-
        tell('todo.pro'),
        listing(todo/1),
        told.