절단(로직 프로그래밍)
Cut (logic programming)![]() | 이 글에는 여러 가지 문제가 있다.이 문제를 개선하거나 대화 페이지에서 토의하십시오.(이러한 템플릿 메시지를 제거하는 방법 및 시기 알아보기)
|
프롤로그에서 컷은 골로, 항상 성공하지만 역행할 수는 없는 !라고 쓰여 있다.불필요한 역추적을 방지하기 위해 컷을 사용할 수 있으며, 이를 통해 불필요한 해결책 및/또는 공간/시간 오버헤드를 쿼리에 추가할 수 있다.
베인 상처는 좀 아껴 써야 한다.오차가 포함된 코드에 컷을 삽입할 수 있지만 컷이 사실임을 보장해줘 테스트가 불필요하다면 적절한 장소에서 코멘트로 그렇게 말하는 것이 좋다.[1]
일부 프로그래머들은 이 컷이 효율성의 이유만으로 추가되었고 혼 조항이 아니기 때문에 논란이 많은 제어 시설이라고 부른다.
종류들
그린컷
효율만 향상시키는 컷(cut)을 사용하는 것을 그린 컷(green cut)이라고 한다.그린 컷은 프로그램 출력을 변경하지 않고 프로그램을 보다 효율적으로 만들기 위해 사용된다.예를 들면 다음과 같다.
도박을 하다(X) :- 돈이 있다(X),!. 도박을 하다(X) :- 신용을 얻다(X), \+ 돈이 있다(X).
이것을 그린컷 연산자라고 한다.그!는 통역사에게 다른 대안들을 찾는 것을 멈추라고 말한다. 그러나,gotmoney(X)
실패하면 두 번째 규칙을 확인할 수 있다.확인 중이지만gotmoney(X)
프롤로그의 외모가 의존하기 때문에 두 번째 규칙에서 중복으로 보일 수 있다.gotmoney(X)
이전에 실패하지 않으면, 두 번째 규칙은 애초에 평가되지 않을 것이다.추가\+ gotmoney(X)
첫 번째 규칙이 우연히 제거되거나 변경되거나 두 번째 규칙 이후에 이동하더라도 두 번째 규칙이 항상 작동하도록 보장한다.
레드 컷
그린 컷이 아닌 컷(cut)을 레드 컷(red cut)이라고 하는데, 예를 들면 다음과 같다.
도박을 하다(X) :- 돈이 있다(X),!. 도박을 하다(X) :- 신용을 얻다(X).
컷 오퍼레이터의 적절한 배치와 규칙의 순서가 논리적 의미를 결정하는데 필요하다.어떤 이유로든 첫 번째 규칙이 제거되거나(예: 절단·폐쇄 사고) 두 번째 규칙 이후에 이동하면 두 번째 규칙이 깨진다(즉, 규칙을 보장하지 않는다).\+ gotmoney(X)
.
참조
- ^ Dyckhoff, Roy (1994-05-20). Extensions of Logic Programming: 4th International Workshop, ELP '93, St Andrews, U.K., March 29 - April 1, 1993. Proceedings. Springer Science & Business Media. ISBN 978-3-540-58025-6.
- ^ 로직 프로그래밍의 기초, 스프링어(2012).