여기

2014-11-16 5 views
2

은 문법이다.여기

및 테스트 S ([a, a, b, c, c, c], []). true를 반환해야합니다. 내 코드에서 목록 요소를 검사하기 위해 일치 규칙을 정의했습니다.


match(H,[H|T],T). 
na(X0,X1):-match(a,X0,X2). 
nb(X0,X1):-match(b,X0,X2). 
nc(X0,X1):-match(c,X0,X2). 
ns(X0,X1):-na(X0,X2),nb(X2,X3),nc(X3,X1). 

이 코드에서 잘못된 점은 무엇입니까? 그것은 당신이 추적 할 때 그러나 진실을 준다. 작동하지 않습니다.

+0

읽기 http://stackoverflow.com/tour 배우고! – false

답변

1
:- set_prolog_flag(double_quotes, chars). 

s --> x, y, z. 
x --> "a",x|"a". 
y --> "b",y|"b". 
z --> "c",z|"c". 

여기 그들은 길이에 의해 정렬됩니다 :이 사이트가 어떻게 작동하는지

?- length(Xs,N),phrase(s, Xs). 
Xs = [a, b, c], 
N = 3 ; 
Xs = [a, a, b, c], 
N = 4 ; 
Xs = [a, b, b, c], 
N = 4 ; 
Xs = [a, b, c, c], 
N = 4 ; 
Xs = [a, a, a, b, c], 
N = 5 ; 
Xs = [a, a, b, b, 
+0

이것이 나에게 어떻게 도움이되는지 나에게 설명 해줄 수 있겠는가? 나는 set_prolog_flag에 대한 규칙을 정의 할 것인가? – hacikho

+0

@ user127518 : 텍스트를 파일에 복사하여 붙여 넣기 한 다음 '[file]'과 상담하십시오. – false

+0

지금 이해하고 있습니다. 예, 작동 중입니다. 나는 그것이 짧고 단순한 것이 아니었다. – hacikho