Prolog 当从其他谓词调用时,谓词retruns false

Prolog 当从其他谓词调用时,谓词retruns false,prolog,Prolog,我用Prolog编写了这个程序 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.

我用Prolog编写了这个程序

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)).

当我尝试使用自定义金额时,一切都很好。与write_文件相同。但read_文件在“write('列表元素之和:')之后返回false。好像自定义金额在这里是个问题。

出于好奇,我运行了你的代码,没有做任何更改。您的代码与我在Windows 10上使用SWI Prolog的系统上预期的一样工作

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].

嗯。有趣。快速黑客永远存在(或至少40年以上)。当您在看到
后立即写出
L
时会发生什么?您使用的是哪种Prolog系统?SWI Prolog?@David Tonhofer它只是在输出上写L,没有任何输出ordinary@Guy来自Manjaro pacman Manager的编码器最新swi prolog可以显示swi prolog的版本。e、 g.我的是
欢迎使用SWI Prolog(线程,64位,版本8.1.24)