Предикат повторяет ложь при вызове из другого предиката - PullRequest
0 голосов
/ 16 марта 2020

У меня есть эта программа на прологе

su([], Counter, Counter).
su([G|O], N, Count) :- Counter is Count + G, su(O,N,Counter).

custom_sum(L,X) :- su(L,X,0).

write_file :-
   write('Type list: '),
   read(L1),
   tell('file.txt'),
      write(L1), write(.), nl,
   told.

read_file :-
   write('Reading from file...'), nl,
   see('file.txt'),
      read(L),
   seen,
   write('sum of list elements: '),
   custom_sum(L,Sum),
   write(Sum), assertz(my_sum(Sum)).

Когда я пытаюсь использовать custom_sum, все в порядке. То же самое с write_file. Но read_file возвращает false сразу после "write ('sum of list list:')". Как будто custom_sum был проблемой здесь.

1 Ответ

1 голос
/ 17 марта 2020

Из любопытства я запустил твой код, ничего не меняя. Ваш код работает так, как я ожидаю, в моей системе с SWI-Prolog на Windows 10.

Welcome to SWI-Prolog (threaded, 64 bits, version 8.1.24)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit https://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?- consult("C:/Users/Groot/Documents/Projects/Prolog/SO_question_180.pl").
true.

?- custom_sum([1,2,3],R).
R = 6.

?- working_directory(Working_directory,'C:/Users/Groot/Documents/Projects/Prolog/SO_question_180/').
Working_directory = 'c:/users/groot/documents/prolog/'.

?- working_directory(D,D).
D = 'c:/users/groot/documents/projects/prolog/so_question_180/'.

?- write_file.
Type list: [1,2,3].

true.

?- read_file.
Reading from file...
sum of list elements: 6
true.

?- 

Мое единственное предположение, что вы вводите список неправильно в приглашении.

Это должно быть [1,2,3]. Вам нужны [ ] и конечный период ..


Содержимое созданного file.txt

[1,2,3].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...