在Prolog中反转列表时运行时错误

时间:2011-04-28 22:48:36

标签: compiler-errors prolog

在线学习练习/教程后,我在运行简单的prolog程序时会遇到以下错误。

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

任何想法为什么?对于prolog来说,这是一个非常新的内容,距离在线教程只有2天,所以请事先接受我的道歉如果我向你提出有关你的答案的进一步问题。谢谢。

1 个答案:

答案 0 :(得分:3)

根据你没有定义fread / 4的错误信息。
另一方面,你给的read_pgm / 2代码也没有定义(除非我遗漏了什么)。

可能的原因:
定义在其他文件中。
你的prolog实现中没有实现fread / 4 你没有用fread / 4加载库。

我认为您应该发布剩余的代码以及您使用的prolog实现 如果你使用swi-prolog,我不认为有fread / 4。