에있는 술어 지식 기반에서 가장 유사한 목록 찾기 나는 요소 목록을 가지고 있고 어느 특정/2 술어의 모든 인스턴스를 거쳐서 어느 것이 가장 높은 일치 번호인지 찾는 문제가있다. 그것의 명부에있는 성분. 구현면에서 지금까지 가장 높은 매치를 어떻게 업데이트하고 더 이상 존재하지 않을 때 멈추어야 하는지를 파악할 수 없습니다.Prolog
findAnswer(MyList, HighMatchNum,_):-
answer(X,Y),
myIntersection(MyList, Y, NUM), //handles a single instance check and returns how many elements match.
NUM > HighMatchNum,
findAnswer(MyList, NUM, answer(X,Y)).
//Knowledge base
answer(sample1, [a,b,c,d]).
answer(sample2, [d,c,e]).
은 * 확실히 * 실패를 산출하고, 그 결과를 데이터베이스에 주장한다. 또한,'findAnswer'는 항상 모든'answer' 사실의 시작부터 시작됩니다. 비표준 솔루션을 사용할 수 있다면 SWI에서'nb_setval'을 'fail'과 함께 사용하여 선형 검색을 수행하는 것이 더 좋습니다. –
확실히 실패합니다. 감사합니다. 필자는 두 가지 구현이있는 도우미 조건부를 추가하여 간단히 작동하게 만들었습니다. 하나는 findAnswer를 호출하고 실패하면 두 번째 값을 검색합니다. –
예, 가능합니다. 이것은 검색의 여파를 다룬다. 나는 수색 그 자체에 그러나 언급하고 있었다. 'findAnswer'는 더 짧은 해결책을 따라 건너 뛰지 만, 현재 최대 값보다 긴 것을 찾으면'findAnswer'를 다시 호출하고 현재 가장 긴 대답이 아닌 새로운 첫 번째 대답부터 시작합니다. 그것이 내가 의미했던 것입니다. :) 흠,'findAnswer'에 대한 마지막 호출 전에 커팅을 삽입해야한다는 것을 알았습니다. –