В Prolog более простым в использовании инструментом анализа ввода является расширение, называемое DCG (Определенная грамматика раздела).Благодаря своей простоте он доступен практически в любой системе.
Используя эту возможность, встроенную 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.