请帮助我这个prolog练习

时间:2015-09-29 07:25:46

标签: io prolog

这是我的作业:

  

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

第二个人可以帮助我吗?

1 个答案:

答案 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