Io 请帮我做这个序言练习

Io 请帮我做这个序言练习,io,prolog,Io,Prolog,这是我的作业: 设f是一个术语文件。定义程序 findterm(术语) 在终端上显示与术语匹配的f中的第一个术语 设f是一个术语文件。写一个程序 findallterm(术语) 在终端上显示与术语匹配的所有术语(以f表示)。确保该术语未在流程中实例化(这可能会阻止其与文件中稍后出现的术语匹配) 我试着用cut来解决第一个问题 findterm(end_of_file) :- !. findterm(Term) :- read(Term1), Term

这是我的作业:

设f是一个术语文件。定义程序
findterm(术语)
在终端上显示与术语匹配的f中的第一个术语

设f是一个术语文件。写一个程序
findallterm(术语)
在终端上显示与术语匹配的所有术语(以f表示)。确保该术语未在流程中实例化(这可能会阻止其与文件中稍后出现的术语匹配)

我试着用cut来解决第一个问题

 findterm(end_of_file) :- !. 
  findterm(Term) :- 
        read(Term1), 
        Term = Term1, 
        write(Term1), nl, ! 
        ; 
        findterm(Term). 

有人能帮我做第二个吗?

下面的程序怎么样

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

你能概述一下你在第二个练习中遇到了什么问题吗?你真的需要为你的问题写一个更好的标题,例如,“在文件中查找一个术语”。目前的标题并没有提供关于你的问题是什么以及你的问题是什么的有用信息。爱丁堡风格的IO不受欢迎。改用ISO Prolog IO!我用ISO Prolog IO更改了程序。现在好多了!非常感谢。