2010-12-31 6 views
2

私は単語の電卓をしようとしています。ファイルから単語を読み込み、数値に変換して結果を計算します。私はそれをすべて行いましたが、私は自分のプログラムに2つのバグがあると思います..Prolog Backtracking

が、私は主に二つの機能...

エキス(単語)、 計算持つ(単語、0)。

抽出物は、ファイルから読み込ん...、その後、単語のリストを返します。..例:[1、プラス、3] .. は今 に..私の数字にこれらの単語の値を変換して計算します計算.. 単語が[stop] Endだったならば、私はファイル内で停止した場合、読み込みを停止して終了する必要があります。 言葉ならば..私が何をしようとしている ...

execute :- 
extract(Words), 
Words \= [stop],execute(Words). 
execute(Words) :- 
calculate(Words,0). 

を私はそれが正常に終了...

execute :- 
extract(Words), 
Words = [stop],nl,print('Terminating ...'),!. 
execute :- 
extract(Words), 
calculate(Words,0). 

を以下を試してみました..しかし、私は複数回の抽出とそれがラインをスキップ停止していない..行くと計算..しかし、それは動作していない!

私は が

答えて

3

副作用ありがとうございました。..助けに感謝(ここではファイルからの読み取りと次期への移動)がバックトラックに取り消されていません。あなたが一度読み込んでいる場合で読み取り用語に基づいて選択をするIF/THEN/ELSEまたは例えば補助述語、することができます:SWI-Prologで

execute :- 
     extract(Words), 
     ( Words == [stop] -> nl, write('Terminating ...') 
     ; calculate(Words, 0) 
     ). 

経由説明読み取りを純粋なファイルのlibrary(pio)を使用することを検討してください期待どおりにバックトラッキングを処理します。

+0

レスポンスありがとうございます。私はそれをしようとしています..それは停止..印刷をキャッチしていますが、それは読んで..私はそれがファイルを解析し、それをthats ..読んでいないことを止めることを教えてくれました。ありがとうございます。私はあなたの助けを感謝します。 – AhmadAssaf

+1

'pio'への参照のために(X)。 – repeat