숫자 목록을 받고 7로 끝나는 숫자 만 인쇄하고 숫자의 합이 100보다 큰 술어를 만들어야합니다.
나는 분리에 대한 술어를 만들었지 만 두 술어의 합집합을 만드는 데 도움이 필요합니다. 두 술어가 하나의 술어로 들어가는 것을 의미합니다. 이것은 지금까지 한 것입니다.
%sum of digits greater than 100
multi(X):-
0 is X mod 100
sum([],0).
sum([P|Q],Z).
multi(P), sum(Q,Z1), Z is P + Z1.
sum([P|Q],Z).
not multi(P), sum(Q,Z).
%print the numbers that end in 7
end(Y):-
7 is Y mod 10.
listend([],0).
listend([P|Q]):-
end(P),write(P), nl, listend(Q).
listend([P|Q]):-
not(end(P)), listend(Q).
이것은 나를 위해 작동합니다.
?- filter([147, 24, 57, 17, 3667], X), write(X), nl, fail.
sumdigits(0, 0).
sumdigits(X, Z) :-
X > 0,
Z1 is X mod 10,
X2 is X // 10,
sumdigits(X2, Z2),
Z is Z1 + Z2.
filter([], []).
filter([H|X], [H|Y]) :-
sumdigits(H, D),
D > 10,
7 is H mod 10, !,
filter(X, Y).
filter([_|X], Y) :- filter(X, Y).
나는 얻다:
[147, 57, 3667]
No.
나는 당신이 숫자의 합이 100이 아니라 10보다 크다는 것을 의미한다고 가정했습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다