프로시저 박스 모델

프로시저 박스 모델

Prolog 실행의 프로시저 박스 모델은 제어 흐름을 보여주는 간단한 방법을 제공해요.

출처: GNU Prolog Manual - The procedure box model

본문

Prolog 실행의 프로시저 박스 모델은 제어 흐름을 보여주는 간단한 방법을 제공해요. 이 모델은 매우 널리 쓰이며 많은 Prolog 시스템(예: SICStus Prolog, Quintus Prolog 등)에서 채택되었어요. 좋은 소개는 Clocksin & Mellish의 "Programming in Prolog" [2]의 8장이에요.

디버거는 프로그램을 단계별로 실행하며 술어에 대한 호출(invocation, call)과 이 술어로부터의 반환(성공 exit 또는 실패 fail)을 추적해요.

실패가 발생하면 실행은 대안 절이 있는 마지막 술어로 백트래킹해요. 그 술어는 다시 호출돼요(redo). 제어 흐름 변화의 또 다른 원인은 예외예요. 술어에서 throw/1(7.2.4절)로 예외가 발생하면(exception) 제어는 catch/3(7.2.4절)으로 이 예외를 처리하는 핸들러를 정의한 가장 최근의 술어에게 넘어가요.

프로시저 박스 모델은 제어 흐름의 이 다양한 변화를 보여줘요. 각 화살표는 **포트(port)**에 해당해요. 박스로 들어가는 화살표는 제어가 이 술어에 주어짐을, 박스에서 나가는 화살표는 프로시저에서 제어가 돌아옴을 나타내요. 이 모델은 이 다섯 개의 포트를 통한 제어 흐름과 하위 목표(subgoal)와 연관된 박스 사이의 연결을 시각화해요.

마지막으로, 박스는 주어진 술어의 한 번의 호출과 연관된다는 점이 분명해야 해요. 특히 재귀 술어는 제어 흐름에서 서로 다른 입구/출구를 갖는 술어 호출마다 박스가 만들어진다는 뜻이에요. 이것이 사용자에게 혼란스러울 수 있으므로, 디버거는 각 박스에 고유한 식별자(즉 호출 번호, invocation number)를 부여해요.

더 알아보기