2011-04-28 11 views
1

オンラインの学習練習/チュートリアルの後、私は簡単なプロローグプログラムを実行しているときに蛇腹エラーが発生します。プロローグでリストを逆転させるとランタイムエラーが発生する

testReverse :- 
    transImage(reserseList,'imageIN.pgm','imageOUT.pgm'). 

transImage(R,In,Out) :- 
    read_pgm(In,PGM), 
    transf_pgm(R,PGM,PGM2), 
    write_pgm(Out,PGM2). 

transf_pgm(R, pgm(A,B,H,W,M,L), pgm(A,B,H,W,M,L2)) :- 
    Term =.. [R,L,L2], 
    call(Term). 

reserseList([],[]). 
reserseList([X|R],Reversed):- 
    reserseList(R, RevList), 
    append(RevList,[X],Reversed). 

とランタイムエラーがSWI-Prologで取得していますなぜすべてのアイデア

10 ?- testReverse 
| . 
ERROR: read_pgm/2: Undefined procedure: fread/4 
ERROR: However, there are definitions for: 
ERROR:   read/1 
ERROR:   read/2 

のですか?私はあなたの答えについてさらに質問をする場合は、プロローグには非常に新しい、文字通りオンラインチュートリアルから2日、私の謝罪を受け入れる。ありがとうございました。

答えて

3

エラーメッセージによれば、定義されているfread/4はありません。一方、read_pgm/2に指定したコードでは、何かが見つからない限り、どちらも定義されていません。

考えられる理由:
定義は他のファイルにあります。
fread/4は、プロローグ実装では実装されていません。
あなたはfread/4でライブラリをロードしませんでした。

私はあなたがコードの残りの部分とあなたが使用しているプロローグの実装を掲示すべきだと思います。
あなたがswi-prologを使っているなら、私はfread/4があるとは思っていません。