このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1248012902/430
#  【 課題 】http://ime.nu/uploader.sakura.ne.jp/src/up1280.jpg
#
# スタックへのpush,pop,add(先頭と次の要素をpopして足したものをpush),
# sigma(スタックにpushされたすべての要素をpopしてその合計をpushする)
# を定義しなさい。
す
push(_追加要素,_スタック,_追加されたスタック) :-
    _追加されたスタック = [_追加要素|_スタック].

pop(_取り出される要素,_スタック,_取り出された後のスタック) :-
    _スタック = [_取り出される要素|_取り出された後のスタック].

empty(_スタック) :- _スタック = [].

length(_スタック,Length) :- length(_スタック,Length).

add(_スタック,[0]) :- length(_スタック,0),!.
add(_スタック,_加算後のスタック) :-
    length(_スタック,1),
    pop(_要素,_スタック,_スタック2),
    push(_要素,_スタック2,_加算後のスタック),!.
add(_スタック,_加算後のスタック) :-
    pop(_要素1,_スタック,_スタック1),
    pop(_要素2,_スタック1,_スタック2),
    push(_合計,_スタック2,_加算後のスタック).

sigma(_スタック,_スタック) :- length(_スタック,1),!.
sigma(_スタック,_全要素加算後のスタック) :-
    add(_スタック,_スタック2),
    sigma(スタック2,_全要素加算後のスタック).