3

나는 프롤로그 프로그래머들에게 매우 간단한 질문을 가지고있다. 이 과정은 매우 쉬워야하지만 그 언어에 대한 경험이 없으므로 도움을 받으십시오. Prolog에서 간단한 프로그래밍 언어를 해석하려고합니다. 이 언어에서는 간단한 변수와 배열 변수라는 두 가지 유형의 변수를 사용할 수 있습니다.컷없이 PROLOG에서 랩핑 된 변수를 패턴 화하는 방법은 무엇입니까?

%calc(+var, +state, -result) 

변수 일 수 있습니다 array(ident, index)x 또는 배열 변수 같은 간단한 변수 : I는 해당 변수의 값을 계산하는 기능을 갖는다. 필자는 Prolog에서이 함수를 어떻게 써야할지 모르겠다. 그래서 정규 변수와 배열 변수에 대해 다른 일을한다.

calc(array(Ident,I), S, R) :- calculating R for array var, !. 
calc(Ident, S, R) :- calculating R for regular var. 

이 작동하지만 더 좋은 방법이있을 :이 같은 것을 마련했습니다.

+1

훨씬 더 좋은 방법이 있는지에 관해서는 여기에 자세히 나와 있지 않지만, 당신이 가지고있는 것은 합리적인 것처럼 보입니다. 칼을 제거하지 않으려면 다음과 같이하면됩니다 : calc (Ident, S, R) : - (Ident = array (Id, I) -> calc_array (Id, I, S, R) R)'또는 이와 비슷한 것 – lurker

+0

고마워요! 예, 나는 상처를 피하려고했는데,이 일을하는 좋은 방법처럼 보입니다. –

답변

3

명확한 방법 : 변수에 대한 전용 래퍼를 사용하여 패턴 일치를 통해 변수를 식별 할 수 있습니다. 예를 들어 :

calc(array(Ident,I), S, R) :- calculating R for array var. 
calc(variable(Ident), S, R) :- calculating R for regular var. 

나는 변수를 식별하기 위해 펑 variable/1을 사용했다.

아니요이 표현을 처리하는 데 아무 것도 필요하지 않으며 검색어를 모든 방향으로 참 관계로 사용할 수 있습니다.

주어진 프로그램을 구문 분석하는 동안 또는 해석 한 후에 전용 펑터로 변수를 래핑하는 사전 처리 단계가 필요할 수 있습니다. 그 후에, 당신은이 깨끗한 표현을 가지며 프로그램의 나머지 부분에서 패턴 매칭을 사용할 수 있습니다.