我正在使用GNU-Prolog,我有以下代码,找到小于X的数字,它们可以被Y整除。假设X和Y> 0
find_num(X, Y) :-
findall(N, between(1,X,N), List),
check_list(List, Y).
check_list([Head|Tail], Y) :-
(
divides(Head, Y) ->
format('~w ~s ~w ~n', [Head, "divisible by", Y]);
true
),
check_list(Tail, Y).
divides(X, Y) :-
X mod Y =:= 0.
代码输出数字的文本,但我希望结果是一个像X = [1,2,3]的列表。
我尝试了多种方法来制作列表,但没有成功,例如:
check_list([Head|Tail], Y) :-
(
divides(Head, Y) ->
findall( X, determine_item(Head, X), List );
true
),
check_list(Tail, Y).
或
find_num(X, Y) :-
findall(N, between(1,X,N), List),
findall(N, check_list(List, Y, N), List2),
write(List2).
check_list([Head|Tail], Y, _) :-
(
divides(Head, Y) ->
Head;
true
),
check_list(Tail, Y).
divides(X, Y) :-
X mod Y =:= 0.
任何帮助都将不胜感激。
答案 0 :(得分:1)
如果你想要一个清单,你的find_num
(以及你的check_list
)需要第三个参数......
怎么样?
divides(X, Y) :-
X mod Y =:= 0.
find_num(X, Y, Lout) :-
findall(N, between(1, X, N), Lin),
check_list(Lin, Y, Lout).
check_list([], _, []).
check_list([H | Tin], Y, [H | Tout]) :-
divides(H, Y),
check_list(Tin, Y, Tout).
check_list([H | Tin], Y, Lout) :-
\+ divides(H, Y),
check_list(Tin, Y, Lout).