2011-10-25 8 views
0

私は町間のルートを見つけるためのプログラムを作成しようとしています。リストにパスを追加してから、最後に表示してください。 リストに追加するのは効果があると思いますが、リストを表示するのに問題があります。パスを見つけたら、どのようにリストを渡すことができますか?皆さんが助けてくれることを願っています。ここでは、コードです:出力が動作しないことができるようにProlog - 表示するパラメータとしてリストを送信する

connected(middlesbrough, stockton). 
connected(middlesbrough, darlington). 
connected(stockton, sunderland). 
connected(darlington, thirsk). 
connected(stockton, newcastle). 
connected(newcastle, york). 
connected(thirsk, york). 
connected(york, leeds). 
connected(leeds, huddersfield). 
connected(leeds, dewsbury). 
connected(huddersfield, manchester). 
connected(dewsbury, manchester). 


run(List):- 
    write('Enter Starting City :'), 
    read(Start), 
    write('Enter Finishing City :'), 
    read(End), 
    findroute(Start,End), 
writeList([List]). 

findroute(Start,End):- 
connected(Start,End). 
findroute(Start,End):- 

add(Start, List, [Start | List]), 

connected(Start,Link), findroute(Link,End). 


add(A,B,[A|B]). 

writeList([]).  
writeList([Head | Tail]):- 
    write(Head),    
    nl,        
    writeList(Tail).     

答えて

2

あなたfindroute/2述語は、リストを返しません。 findroute(Start,End,List)

もちろん、findroute/2述語がfindroute/3に変更する必要があります:

呼び出しは次のようになります

findroute(Start,End,[Start,End]):- 
    connected(Start,End). 
findroute(Start,End,List):- 
    connected(Start,Link), 
    add(Start,Rest,List), 
    findroute(Link,End,Rest). 

(ヒント:あなたはadd/3呼び出しにもかかわらず、働く理由を理解してください休息あなたの家庭教師はこのコードがあなたの宿題であるとは思わないでしょう!;-))

最初の句は、最短ルートだけを探したい場合に使用します。

最後にリストはすでにリストになっていますので、writeList/1を呼び出すときには、角括弧を使用しないでください!

+0

ありがとうございました。私はプログラミング(java、c#、php)をかなり行ってきました。私は本当にそれを楽しんでいますが、プロローグでは非常に苦労しています。再度ありがとう、本当にこれを感謝します。 – tomsky

関連する問題