这是我的作业:
设f为术语文件。定义一个程序
findterm(Term)
在终端上显示f中与术语匹配的第一个术语。设f为术语文件。写一个程序
findallterm(Term)
在终端上显示f中与Term匹配的所有条款。确保在过程中未实例化Term(这可能会阻止它与文件中稍后出现的术语匹配)。
我尝试使用cut来解决第一个问题
findterm(end_of_file) :- !.
findterm(Term) :-
read(Term1),
Term = Term1,
write(Term1), nl, !
;
findterm(Term).
第二个人可以帮助我吗?
答案 0 :(得分:1)
以下程序怎么样?
findallterm(Term, File_name) :-
open(File_name, read, Stream),
findterm(Stream, Term),
close(Stream).
findterm(Stream, _) :-
at_end_of_stream(Stream),
!.
findterm(Stream, Term) :-
read(Stream, Term_data),
( Term == Term_data
-> write( Term_data ), nl
; true
),
findterm(Stream, Term).
输入文件如下。 ' C:/work/data.txt'
sun.
mercury.
sun.
mercury.
venus.
earth.
sun.
mercury.
venus.
结果
6 ?- findallterm( mercury, 'C:/work/data.txt' ).
mercury
mercury
mercury
7 ?- findallterm( venus, 'C:/work/data.txt' ).
venus
venus