【问题标题】:Please help me with this prolog excercise请帮我完成这个序言练习
【发布时间】:2015-09-29 07:25:46
【问题描述】:

这是我的作业:

令 f 为术语文件。定义一个过程 findterm(Term) 在终端上显示 f 中与 Term 匹配的第一个术语。

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

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

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

谁能帮我解决第二个问题?

【问题讨论】:

  • 您能概括一下您在第二个练习中遇到的问题吗?
  • 您确实需要为您的问题写一个更好的标题,例如“在文件中查找术语”。目前的标题没有提供任何有用的信息来说明您的问题是什么以及您的问题是什么。

标签: io prolog


【解决方案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

【讨论】:

  • 爱丁堡风格的 IO 已弃用。 改用 ISO Prolog IO!
  • 我用 ISO Prolog IO 改变了程序。
  • 现在好多了!谢谢。
猜你喜欢
  • 2020-01-27
  • 1970-01-01
  • 2021-10-10
  • 2015-03-27
  • 2011-01-14
  • 1970-01-01
  • 2023-01-13
  • 2021-02-12
相关资源
最近更新 更多