2009-11-13 2 views
1

에 차단. 내가 가진 문제는 첫 번째 줄에 컷오프 연산자입니다. 아마도이 호출이이 코드 줄에 도달 할 때마다 이것이 유일한 유일한 해결책 일 것이고 함수 호출은 간단히 풀릴 것입니다 (또는 끝났습니까?). 다른 솔루션을 추적하고 검색 할 필요가 없습니다. 질문.프롤로그 내가 당신에게 코드에 대해 뭔가를 부탁드립니다 질문이 방법

이렇게 여기에서 잘라내는 것은 불필요합니다. 내 공제에서 맞습니까?

답변

1

예, 어떤 반 기울이는 Prolog 컴파일러는 두 번째 인수가 빈 목록 인 다른 절이 없음을 알게됩니다.

둘째 절과 세 번째 절을 결합하여 로컬 잘라내기를 사용하더라도 (두 번째 절의 끝에서 더 유용 할 것입니다. (...) -> ... ...)).

0

네, 맞습니다. 컴파일러가 절반 정도 (SWI 프롤로그가 확실합니다)가 아닐지라도, 가장 나쁜 것은 두 번째와 세 번째 절을 일치 시키면 즉시 실패합니다.

그러나 두 번째 절이 일치하면 세 번째 절도 마찬가지입니다. 이것은 의도 된 행동입니까?

1

일치하는 후보 술어를 제거하는 컴파일러 사용자의 특정 기술을 인수 인덱싱이라고합니다. 다른 프롤로그 구현은 기본적으로 서로 다른 개수의 인수를 인덱싱 할 수 있습니다.

그래서 인수가 색인되고 있는지 여부가 걱정된다면, 색인을 사용하는 프롤로그의 인자 수를 확인해야합니다. SWI reference manual에 따르면 기본적으로 첫 번째 인수 만 인덱싱합니다. 따라서 귀하의 경우 절단은 실제로 중복되지 않습니다. 그러나 위 링크에 링크 된 술어 index/1hash/1을 사용하여 어떤 인수를 색인화해야하는지 명시 적으로 지정할 수 있습니다.

또는 인수를 재정렬하면됩니다. 아니면 그냥 계속 잘라내십시오.

관련 문제