我需要能够识别文本中最大值的程序。 首先在其中流式传输文本文件
我通过char获取信息char但不能进行计算,结果是正方形或不正方形。如果是方形,则给出sample.txt坐标中的数字。
setup:-process('sample.txt').
process(File) :-
open(File, read, In),
get_char(In, Char1),
process_stream(Char1, In),
close(In).
process_stream(end_of_file, _) :- !.
process_stream(Char, In) :-
get_char(In, Char2),
look(Char,Char2),
process_stream(Char2, In).
答案 0 :(得分:2)
在Prolog中,更易于使用的输入分析工具是名为DCG(Definite Clause Grammar)的扩展。由于其简单性,它几乎可在任何系统中使用。
使用该工具,内置read_line_to_codes和实用程序integer // 1我们可以写:
:- [library(readutil),
library(http/dcg_basics)].
setup :- process('sample.txt').
process(File) :-
open(File, read, Stream),
repeat,
read_line_to_codes(Stream, Codes),
( Codes == end_of_file
-> close(Stream), !
; phrase(check_rectangle, Codes, _), fail
).
% just print when |X2-X1|=|Y2-Y1|, fails on each other record
check_rectangle -->
integer(X1), ",", integer(X2), ",",
integer(Y1), ",", integer(Y2),
{ abs(X2-X1) =:= abs(Y2-Y1)
-> writeln(found(X1,Y1,X2,Y2))
}.
输出(我添加了一个放大的矩形只是为了测试):
?- setup.
found(10,30,20,40)
found(100,300,200,400)
true.