Ошибки времени выполнения при обращении списка в Прологе - PullRequest
1 голос
/ 29 апреля 2011

Следуя некоторым учебным упражнениям / учебным пособиям онлайн, я сталкиваюсь с нижеуказанной ошибкой при запуске моей простой прологической программы.

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 дня из онлайн-уроков, поэтому примите мои извинения заранее, если я задам вам дополнительные вопросы относительно вашего ответа.Спасибо.

1 Ответ

3 голосов
/ 29 апреля 2011

в соответствии с сообщением об ошибке, которое вы не определили fread / 4.
с другой стороны, в коде, который вы дали read_pgm / 2, тоже не определено (если я что-то упустил).

возможные причины:
определение находится в каком-то другом файле.
fread / 4 не реализован в вашей реализации пролога.
вы не загрузили библиотеку с помощью fread / 4.

Я думаю, вы должны опубликовать остальную часть кода и какую реализацию пролога вы используете.
если вы используете swi-пролог, я не думаю, что есть фред / 4.

...