2

我需要可以识别文本中最大值的程序。首先在其中流式传输一个文本文件,然后

我逐个字符地获取信息,但无论是否为正方形,都无法进行计算和结果。如果是正方形,则给出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).
4

1 回答 1

2

在 Prolog 中,更易于使用的输入分析工具是一个名为DCG(定句语法)的扩展。由于其简单性,它几乎可以在任何系统中使用。

使用该工具,内置的read_line_to_codes和实用程序整数//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.
于 2012-03-07T14:22:40.360 回答