• ベストアンサー

prologの記号について

prologを勉強中です.次のように階乗を計算します fact(N, 1) :- N < 1!. fact(N, X) :- N1 is N - 1, fact(N1, Y), X is N * Y. そのとき,1行目の最後の"!"は何を表すのでしょうか? たぶん,それ以上先を実行しないという意味だと思うのですが, 正しい意味が分かりません.ご指導お願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

カットといいます。 意味は、仰るとおりそれ以上実行しないといった感じです。 バックトラックの挙動を制御するための特殊なゴールで、正確に言うと、「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

whgpw017
質問者

お礼

わかりました.ありがとうございました.

その他の回答 (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といえども「アルゴリズム」の呪縛からは逃れられないという一例でもあります。

関連するQ&A