2013-05-22 2 views
1

본인의 코스에서이 간단한 DCG 과제 (프롤로그)를 해결하려고합니다. 문제는 DCG를 만드는 것입니다. 나는 이미 내 규범에서 담론의 우주를 정의했다. 그러나이 질문은 저에게 약간 오도하는 것입니다. 내가 읽은 것과 아는 것에 따르면, 내 노트와이 Learn Prolog Now를 사용하십시오! - 링크 : http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse29DCG (프롤로그) 문제

(a^nb^nc^n)으로 DCG를 구성 할 수 있습니다. 여기서 b와 c는 보통 글자이고 n은 글자가 곱해질 숫자입니다. 그러나, 내 질문은 이와 같습니다.

"언어 0n1n0n을 인식 (또는 생성)하기위한 DCG 설계 및 구현"

누군가 나를 도와주세요. 질문에서 정확히 원하는 것은 무엇입니까?

답변 중 하나와 관련하여 다음 코드를 사용해 보았습니다. I 생각

s --> []. 
s(M) --> a(M),b(M),c(M). 

a --> []. 
a(New) --> [0], a(Cnt),{New is Cnt+1}. 

b --> []. 
b(New) --> [1], b(Cnt),{New is Cnt+1}. 

c --> []. 
c(New) --> [0], c(Cnt),{New is Cnt+1}. 

count(T, N) --> [0,1,0], count(T, M), {N is M+1}. 
count(_, 0) --> []. 
+0

's의 -> [] .' 쓸모가 없다. 'a -> [] .'는'a (0) -> [] .' 등이어야합니다. * EDIT * 섹션에 게시 했으므로 이러한 변경 사항은 생성 부분에서도 필요합니다. – CapelliC

+0

나는 당신에게 알려주려고 노력할 것이다! 감사합니다 – Cuta

+0

그냥 알려 드리겠습니다. Learn Prolog Now의 예를 따랐습니다. 링크. http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse29. 나는 또한 이것을 시도했다 : s -> a, s, b, s, c. 그것은 [a, b, c]와 완벽하게 작동하지만, [a, a, b, b, c, c]를 입력하면 false가됩니다. – Cuta

답변

1

DCGS는 프롤로그에서 호스팅 하위 언어이며, 다음은 터미널 T. 물론

count(T, N) --> [T], count(T, M), {N is M+1}. 
count(_, 0) --> []. 

?- phrase(count(a, C), [a,a,a]). 
C = 3 ; 
false. 

의 발생을 계산하기 쉽게, 당신이 쉽게 문제를 해결할 수 있습니다 찾아야한다.

편집 : 생성 부분을 놓쳤습니다. count/2는 내장 산술로 인해 생성을 위해 작동하지 않습니다. 후계자에게 표기 코드를 사용하여 너무 발전기로 작동 할 수 있습니다

count(T, s(N)) --> [T], count(T, N). 
count(_, 0) --> []. 
+0

첫 번째 코드를 사용해 보았습니다. 그러나 문제는 여기에 있습니다. 010010010 대신 000111000을 (예를 들어) 계산하고 싶습니다. 코드에 대한 최신 게시물을 참조하십시오. – Cuta

1

는 "0n1n0n"는 "0 N 1 N 0 N"를 의미한다, 즉 제로의 어떤 숫자들 중 동일한 번호 뒤에 다시 제로의 동일한 숫자로 하였다.

+0

시도 할 것입니다! 고마워요. – Cuta