프롤로그 조건자를 DCG 코드로 변환하려고합니다. 문법 langage에 익숙하다 할지라도 DCG가 어떻게 목록과 함께 작동하는지 그리고 어떻게 사용해야하는지 이해하는 데는 몇 가지 어려움이 있습니다.프롤로그에서 목록 사용 DCG
cleanList([], []).
cleanList([H|L], [H|LL]) :-
number(H),
cleanList(L, LL),
!.
cleanList([_|L], LL) :-
cleanList(L, LL).
그것은 숫자가 아닌 요소를 제거하는 간단한 조건입니다 :
사실이 내 조건입니다. 나는 DCG에서 같은 행동을하고 싶습니다.
cleanList([]) --> [].
cleanList([H]) --> {number(H)}.
cleanList([H|T]) --> [H|T], {number(H)}, cleanList(T).
이 잘못 또는 무엇을없는 걸 설명 할 수 있는가 :
나는 (분명히 작동하지 않습니다)처럼 뭔가를 시도?감사합니다.
하나의 큰 문제 렘은'... -> [H | T], ...'입니다. DCG가 시퀀스를 읽고 '[H | T]'가 임의의 길이를 가지기를 원한다. 왜 그 용어에 'T'를 포함 시켰는지 확실치 않습니다. 'cleanList (T)'에 대한 재귀 호출은 이미 입력에서'T'를 스캔합니다. – lurker
오, 그래! 답장을 보내 주셔서 감사합니다. DCG가 시퀀스를 반복적으로 읽는 방법을 이해하지 못했습니다. 지금은 괜찮습니다. – Naeoth