을 읽을 것 BNF에 (DCG로 번역 당신이 이미 알고있는) 것을, 대칭 정의를 변경, 당신은 카운트의 차이를 다루는 방법이 필요합니다. 문법 용어 인 palindromes
에 숫자 인자를 추가하여이를 수행 할 수 있습니다.
우선은 "B
가 두 개 더 A
보다"구현하는 일반 프롤로그 규칙을 정의 할 것이다 : 어떤 회문는 주어진 알파벳에 우리가 palindromes(Diff)
을 말할 것이다 그리고
plus2(A,B) :- number(A), !, B is A+2.
plus2(A,B) :- number(B), !, A is B-2.
plus2(A,B) :- var(A), var(B), throw(error(instantiation_error,plus2/2)).
을 의미 곳 b
문자 마이너스의 수 a
글자의 수는 Diff
입니다. 기본 케이스를 들어, Diff
정확히 알고 재귀 문법 규칙에 대한
palindromes(0) --> [].
palindromes(-1) --> [a].
palindromes(1) --> [b].
, 우리는 plus2
조건 확인 {
중괄호 }
에 코드 블록을 사용할 수 있습니다
palindromes(DiffOuter) --> [b], palindromes(DiffInner), [b],
{ plus2(DiffInner, DiffOuter) }.
palindromes(DiffOuter) --> [a], palindromes(DiffInner), [a],
{ plus2(DiffOuter, DiffInner) }.
을 마무리하기를, 최상위 문법 규칙은 단순히
입니다. 그보다 더 열심히 노력할 수 있다고 생각합니다. –
두 번째 및 세 번째 기본 사례가 귀하의 규칙을 따르지 않습니다. 그들은 'a'의 숫자가 'b'의 수인 – joneshf