通过文本流查找最大值

时间:2012-03-07 00:38:05

标签: if-statement streaming prolog text-files dcg

我需要能够识别文本中最大值的程序。 首先在其中流式传输文本文件

我通过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).

1 个答案:

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