У меня есть прологовое задание, которое требует от нас составить список всех пар чисел в диапазоне двух значений. Я могу заставить его выводить (используя одну функцию) следующее, но я не знаю, как объединить все выходы. Вот outbut вызова функции:Объединить выходы в один список в Prolog
?- i(L,5,7).
L = [(5, 5), (5, 6), (5, 7)] ;
L = [(6, 5), (6, 6), (6, 7)] ;
L = [(7, 5), (7, 6), (7, 7)] ;
А вот код (интервальные методы проф определены и не могут модифицировать):
interval(X,L,H) :-
number(X),
number(L),
number(H),
!,
X>=L,
X=<H.
interval(X,X,H) :-
number(X),
number(H),
X=<H.
interval(X,L,H) :-
number(L),
number(H),
L<H,
L1 is L+1,
interval(X,L1,H).
i(L,X,Y):-
interval(N2,X,Y),
setof((N2,N),interval(N,X,Y),L).
Ищу выход, чтобы быть вместо этого:
L = [ (5, 5), (5, 6), (5, 7), (6, 5), (6, 6), (6, 7), (7, 5), (7, 6), (7, 7)]
Спасибо! Я предполагал, что это было что-то простое, что мой сон лишил мозг. –
Не уверен, что вы должны называть '(X, Y)' кортежем. Это («Х», «Y»), но тогда «(X, Y, Z)» не является «кортежем», как например, в Python или Haskell (потому что это '', '(X,', '(Y, Z)) ', а не'', '(X, Y, Z) '). –
@Boris: но на самом деле вы не можете вызывать '[1,2]' список, это '| (1, | (2, []))'. В Прологе нет «реальных данных». Prolog является нетипизированным, поэтому он означает, что структуры данных существуют только потому, что это говорят программисты. –