2017-01-16 1 views
0

목록에서 주어진 숫자의 발생을 계산하는 데 문제가 있습니다. 예를 들어 L = [4,5,6,4,3,4,2,4,5,6,7,4]과 같은 목록이 있고 목록에 얼마나 많은 수의 4이 있는지 계산하려면 응답은 5입니다. 목록의 숫자 계산

나는 프롤로그에서이를 구현하려고했으나 gprolog는 답변으로 만 no 나에게 보여줍니다

count_occ([], 0). 
count_occ([H|T], L) :- count_occ(T, N), H =:= 4, L is N + 1. 

내가 왜 모르겠어요.

+1

H' 4. – Alexander

+0

@Alexander이없는 경우'무슨 일에 대해 생각 : 당신은 단순히 재귀 호출을 수행 내가 변경된 - count_occ (T, N), (H = : 4, L은 N + 1), (H = \ 4, L은 N + 0) 성공했다. – mirx

+0

이것은 H가 모두 4, ** 및 **가 4와 같지 않음을 의미합니다. 이는 분명히 모순입니다. 3 개의 술어가 필요하다고 생각합니다. 기본 술어는 H가 4 인 경우이고 다른 하나는 H가 아닌 경우입니다. 4 – Alexander

답변

2

나는 문제가 당신이하지 않는 생각 H4이 아닌 경우 Prolog가 취할 수있는 절을 제공하십시오. 이것은 그러나 쉽게 :

count_occ([H|T],N) :- 
    H \= 4, 
    count_occ(T,N). 

또는 전체 구현 :

count_occ([],0). 
count_occ([4|T],N1) :- 
    count_occ(T,N), 
    N1 is N+1. 
count_occ([H|T],N) :- 
    H \= 4, 
    count_occ(T,N). 
3

나는 이것을 찔렀다. 지난 2 술어가 하나로 결합 할 수있는 조건식을 사용하여

% count_occurences(+List, +DesiredElement, -NumOccurences) 

count_occurences([], _, 0). 

count_occurences([H|T], DesiredElement, NumOccurences) :- 
    H =\= DesiredElement, 
    count_occurences(T, DesiredElement, NumOccurences). 

count_occurences([H|T], DesiredElement, NumOccurences) :- 
    H =:= DesiredElement, 
    count_occurences(T, DesiredElement, N), 
    NumOccurences is N + 1. 

: 나는 여분의 자세한 정보가를 따라 쉽게 있도록 만든

% count_occurences(+List, +DesiredElement, -NumOccurences) 

count_occurences([], _, 0). 

count_occurences([H|T], DesiredElement, NumOccurences) :- 
    count_occurences(T, DesiredElement, N), 
    (H =:= DesiredElement ->  /* if H is DesiredElement */ 
     NumOccurences is N + 1; /* "then" */ 
     NumOccurences is N  /* "else" */ 
    ). 
+0

첫 번째 술어 절은 간단히 'count_occurences ([], 0, _)'일 수 있습니다. – lurker

+0

@lurker : 알렉산더는 가능한 한 명시 적으로 OP가 프로그램을 따라갈 수 있다고 생각합니다. 머리에 통일에 대해 몰라요. –

+0

@lurker 각 매개 변수가 무엇인지 문서화하기 위해 변수 이름을 의도적으로 넣었습니다. – Alexander