왜 룰 엔진이 프롤로그에 작성되지 않습니까? [닫은]


16

내가 Prolog에서 본 것처럼 앱의 규칙 엔진을 만드는 데 이상적입니다. 그러나 나는 내가 Prolog로 작성된 규칙 엔진을 본 적이 없다고 생각합니다. 규칙 엔진을 빌드하는 데 사용되지 못하게하는 Prolog (예 : 가비지 수집 알고리즘 불량)에 고유 한 제한이 있습니까?


7
사다리. (거의) 아무도 프롤로그를 알지 못하며, 더 많은 개발자는 일상 업무를 수행하지 않아 집에 갈 수있는 것을 알고 싶지 않습니다. 불행히도, 프롤로그는 꽤 멋지다.
Jimmy Hoffa

3
프롤로그는 훌륭한 edsl을 만듭니다. Haskell 또는 Scheme과 같은 언어로 프롤로그를 삽입하는 것이 내가 일반적으로 취하는 접근법입니다.
Daniel Gratzer

3
@JimmyHoffa 점점 줄어들고 있습니다. 일부 사람들은 프롤로그를 배우고 나머지 작업 수명 동안이를 사전에 잊어 버리려고합니다.
ZJR

5
3 번의 찬성표를 봅니다. 문제를 해결하거나 철회 할 수 있도록 질문에 무엇이 잘못되었는지주의를 기울이는 사람이 있습니까?
Onorio Catenacci

2
나는 "주요 의견 기반"으로 마감했다. 달리 설득 할 수 있으면 가까운 투표를 철회하겠습니다. 나는 개인적으로 프롤로그가 불투명하다는 것을 알았습니다. 규칙 엔진에 규칙을 정의하기위한보다 직관적 인 구문이있을 것으로 기대합니다. 또한 규칙 엔진 자체의 구문 프로토 타입 아니라 프로그래밍 언어입니다.
Robert Harvey

답변:


14

초기 단계의 규칙 엔진은 거의 독점적으로 Prolog로 작성되었습니다. 논리적 언어였습니다. 작은 규칙 집합을 위해 그들은 잘 작동했습니다. 그러나 확장 성이 좋지 않은 것으로 나타났습니다. 나는 명확한 참조가 없지만 Prolog가 규칙 체인을 처리하는 방식이 비효율적이라는 사실을 이해하고 있습니다.

RETE 알고리즘 및 후속 알고리즘의 개발로 인해 대량의 규칙을보다 효율적으로 처리 할 수있게되었습니다.

아마도 현대 프롤로그는 대부분의 초기 작업이 완료되었을 때 80 년대보다 더 효율적일 것입니다.



1
이것을 다루는 또 다른 기사 : haleyai.com/wordpress/2013/06/22/…
Matthew Flynn

미친 질문입니다. 사람들이 RETE를 프롤로그로 구현하지 않아서 두 단어를 최대한 활용하지 않았습니까? (RETE가 프롤로그가 수행하지 않는 작업이 많이 있습니다).
user48956 2016 년

14

혀-인-뺨 답변 : Rules Engines 제작자가 Prolog (또는 Mercury 또는 PLANNER 또는…)에 대해 알고 있다면 Rule Engines를 작성하지 않을 것이므로 Prolog를 사용하게됩니다.


5

일반적으로 규칙 엔진의 요점은 다른 엔진의 일부라는 것입니다. Prolog로 작성된 응용 프로그램을 보는 것은 매우 드물며 다른 언어로 작성된 응용 프로그램에 Prolog를 연결하는 데 일반적으로 사용 가능한 인터페이스는 없습니다.

다른 애플리케이션에 추가되도록 작성된 규칙 엔진 용 규칙 기반 도구 중 하나는 CLIPS 입니다. CLIPS는 OPS5를 기반으로 하며 정리 규칙에 Rete 알고리즘 을 사용합니다 .


완전히 사실은 아니지만 외부 프로그램에서 Prolog 코드까지의 인터페이스가 있습니다. SWI-Prolog에는 C ++ 인터페이스와 R 연결 방법이 있습니다.
Rudolf Olah

3
실제로 "nobody"는 완전한 앱을 위해 Proolog를 사용하지만 C 함수를 호출하여 특수 라이브러리를 호출하는 "모든 사람"방법으로 C 또는 C ++에서 작동하는 모든 프롤로그 엔진을 보았습니다. 즉 GNU 프롤로그 gprolog.univ-paris1.fr/manual/html_node/gprolog065.html
johannes

그 포인터 @johannes에 감사드립니다. 나는 GNU Prolog를 전혀 몰랐다. C에서 호출 할 수 있다는 사실은 훨씬 적습니다.
Onorio Catenacci

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.