2014-11-24 4 views
-1

주어진 데이터베이스를 가져옵니다.동적 숫자 추가

input(80). 
input(30). 
input(25). 
input(90). 

입력을 50 회 이상 100 회 계산하고, 1 입력 만 취하도록 제한합니다. 예 : 내가 실패, 컴퓨팅 기능을 해내 다음 프롤로그 코드를 시도

%compute(?integer). 
compute(I). 
I = 200 %seeing as input(80) and input(90) matches the condition of being above 50 

: 내가 의도 한대로

compute(I) :- input(G), G>50, I is I+100. 

의 I + (100)가 작동하지 않습니다.

+0

귀하의'논리'G'가 입력되면 *'컴퓨팅 (I)'사실이다,라고 때문에 compute'이 작동하지 않습니다,': 다음은 사용자가 정의한 일을하는 코드 G> 50', 그리고 'I + I + 100'이다. 'I'에 대한 초기 값은 없으며, 존재한다면'G> 50'을 처음으로 성공합니다. 'findall'로 할 수있는 가능한 모든 값들을 모으고 싶습니다. – lurker

답변

1

프롤로그는 매치를 하나씩 검색하고 모든 결과가 아닌 각 입력에 대해 쿼리 결과를 반환합니다. 일치하는 모든 값을 수집하려면 bagof, setof 또는 findall 메타 기준을 사용할 수 있습니다.

input(80). 
input(30). 
input(25). 
input(90). 

compute(I) :- 
    findall(X, (input(X), X>50), L), % Find all X's that are 'input' and >50 into L 
    length(L,Len),     % Find the length of L and put into Len 
    I is Len * 100.     % I is Len times 100 
+0

이 작품, 유진 Sh 감사합니다. :) – user3711518

+0

@false, 죄송합니다. 내 의견을 삭제했습니다. 매우 명확하지 않았습니다. – lurker