에 대한 설명은 참으로 매우 적합합니다. 모두가 솔루션
: 예를 들어
, 우리가 간단한 질문을 물어 보자?
?- nr_vowel(Ls, N).
Ls = [],
N = 0 ;
Ls = [a],
N = 1.
흠 :
는 모든 인수가 신선한 변수이 어디 가장 일반적인 쿼리를 게시하여, 밖으로 밖으로보십시오! 아마 당신이 묘사하길 원하는 것이 아닙니다!
nr_vowel([], 0).
nr_vowel([X|T], N):-
vowel(X),
nr_vowel(T,N1),
N #= N1+1.
nr_vowel([X|T], N):-
nr_vowel(T,N).
그런 다음 우리가 얻을 :
?- nr_vowel(Ls, N).
Ls = [],
N = 0 ;
Ls = [a],
N = 1 ;
Ls = [a, a],
N = 2 ;
Ls = [a, a, a],
N = 3 ;
etc.
더 잘 보이는
그래서 나는 당신의 코드를 변경!
어때 대략 공정한 열거? 보자 :
?- length(Ls, _), nr_vowel(Ls, N).
Ls = [],
N = 0 ;
Ls = [a],
N = 1 ;
Ls = [e],
N = 1 ;
Ls = [i],
N = 1 ;
Ls = [o],
N = 1 ;
Ls = [u],
N = 1 ;
Ls = [_2006],
N = 0 ;
Ls = [a, a],
N = 2 ;
Ls = [a, e],
N = 2 .
처음 몇 대답은 모든 것을 Ls = [_2006], N = 0
에 대한 유망한 보이지만?
이것은 분명히 입니다.!
너무 일반적으로 대답하지 않으려면 프로그램 을으로 지정해야합니다.
?- nr_vowel([X], N), X = a.
X = a,
N = 1 ;
X = a,
N = 0.
Whaaat : 여기
는 한마디에 문제가?
a
은 모음인데, 왜
N = 0
?? 그것은 작은 마디 여기
이다
?- nr_vowel([a], 0).
true.
Whaaaaat는 ??
연습용으로 술어에 제약을 적절하게 추가해 둡니다.