アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (2件)

カットといいます。


意味は、仰るとおりそれ以上実行しないといった感じです。
バックトラックの挙動を制御するための特殊なゴールで、正確に言うと、「1回目の評価は成功するが、(バックトラック後の)2回目以降の評価では失敗する」というものです。
http://www.google.com/search?num=50&hl=ja&q=%E3% …
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/19 19:09

解答はANo.1の方が出されておりますので、このプログラムについてのウンチクをひとつ


このプログラムは1行目と2,3,4行目の2ステップで成り立っています。
階乗計算をする際にNから順にNをデクリメント(-1)しながら掛けていくと最終的に1にたどり着きます(1の階乗は1というやつ:それ以下になると0、かけちゃうと答えはすべて0になってしまいますから)。
この1行目と2行目を入れ替えて処理しようとした場合どうなるでしょうか(3とか簡単な数字で試してみてください)。
これは、人工知能言語と呼ばれるPrologといえども「アルゴリズム」の呪縛からは逃れられないという一例でもあります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!