- ベストアンサー
prologの記号について
prologを勉強中です.次のように階乗を計算します fact(N, 1) :- N < 1!. fact(N, X) :- N1 is N - 1, fact(N1, Y), X is N * Y. そのとき,1行目の最後の"!"は何を表すのでしょうか? たぶん,それ以上先を実行しないという意味だと思うのですが, 正しい意味が分かりません.ご指導お願いします.
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
カットといいます。 意味は、仰るとおりそれ以上実行しないといった感じです。 バックトラックの挙動を制御するための特殊なゴールで、正確に言うと、「1回目の評価は成功するが、(バックトラック後の)2回目以降の評価では失敗する」というものです。 http://www.google.com/search?num=50&hl=ja&q=%E3%82%AB%E3%83%83%E3%83%88+prolog&lr=lang_ja
その他の回答 (1)
- ralf124c
- ベストアンサー率52% (232/446)
回答No.2
解答はANo.1の方が出されておりますので、このプログラムについてのウンチクをひとつ このプログラムは1行目と2,3,4行目の2ステップで成り立っています。 階乗計算をする際にNから順にNをデクリメント(-1)しながら掛けていくと最終的に1にたどり着きます(1の階乗は1というやつ:それ以下になると0、かけちゃうと答えはすべて0になってしまいますから)。 この1行目と2行目を入れ替えて処理しようとした場合どうなるでしょうか(3とか簡単な数字で試してみてください)。 これは、人工知能言語と呼ばれるPrologといえども「アルゴリズム」の呪縛からは逃れられないという一例でもあります。
お礼
わかりました.ありがとうございました.