4

문자열이 특정 패턴과 일치하는지 확인해야하는 프로그램을 작성하고 있습니다. 지금 당장 나는 Prolog에서 20 가지 이상의 다른 정의를 가진 규칙 matchesPattern (S)을 구현했다.Prolog에서 최적의 절 순서를위한 통계를 수집하는 라이브러리/기법이 있습니까?

패턴 확인 술어를 통해 특정 길이까지 모든 2 진 문자열을 실행하게됩니다. 프로그램은 상당히 느리고 (Prolog는 종종 그렇듯이), 너무 많은 다른 정의가 있기 때문에, 가장 많이 매칭 된 것들을 순서대로 가장 먼저 나열하고 Prolog에서 처음으로 매치 시켜서 내가 할 수있는 한 많이.

지금 SWI Prolog를 사용하고 있습니다. 그러나 SICStus에 액세스 할 수 있으므로 사용하거나 Prolog 인터프리터를 무료로 사용할 수 있습니다.

답변

-2

당신은 DCG를 사용하고 자르기를 생각합니다.

+0

편리 할 때 이미 커팅을 사용하고 있으며 DCG도 사용하고 있습니다. DCG가 속도 향상을 제공합니까? – jmite

+1

예 속도 향상을 제공하지 않습니다. – whd

-3

컷을 조사해야합니다. 이에 대한 프롤로그 구문은 다음과 같습니다

! 
+0

컷을 사용합니다. 그러나 컷의 효과는 절의 순서에 따라 크게 달라집니다. 즉, 마지막 하나가 항상 성공하는 경우, 다른 모든 것들을 성공시킨 후에도 나눠도 문제가되지 않습니다. 어쨌든. – jmite

2

SWI - 프롤로그은 당신의 작업에 도움이 될 수 profile/3show_profile/2 있습니다.

패턴 규칙을 포함하고 잘라내기를 적용하면 패턴 사이에 공통 부분이있는 경우 런타임을 향상시킬 수 있습니다. 그러한 분석은 통계와 결합되어야한다.

+0

프로필은 어떤 목표에 가장 많은 시간이 걸리는지 알려주지 만 각 목표의 정의 중 가장 많은 시간이 걸리는 부분을 알려줍니다. 저는 이것을 꽤 많이 사용했습니다. 주문 관련 정보를 제공하는 방법을 모르겠습니다. – jmite

+0

당신이 옳다면 '파견'기호가 필요합니다. 하지만 그때 너는 전화를 스스로 계산할 수 있었다. – CapelliC