몇 년 전에 대학에서 프롤로그를 배웠습니다. 직업 생활 중에는 Prolog를 사용할 필요가 없었습니다. 내가 특별한 것을 놓친 적이 있습니까?
내가 기억하는 한, Prolog는 저명한 프로그래밍 언어와 비교할 때 완전히 다른 사고 방식이 필요합니다.
Prolog가 실제로 전문적으로 유용한 것을 구현하는 데 사용 되었습니까?
답변
제 생각에, 실제 세계에서 그것을 사용할 것인지에 관계없이 Prolog의 기초를 배우는 것은 매우 가치가 있습니다. 통일의 기본 아이디어와 (사소하고 비효율적 인) 구현을 처리하는 방법을 이해하는 것도 매우 가치가 있습니다.
선언적 논리를 사용하여 가장 잘 해결할 수있는 문제가있는 경우 이상적으로이를 인식하고 해당 작업에 적합한 도구를 사용하도록 선택해야합니다.
그러나 Prolog에는 기존의 명령형 언어와는 매우 다른 사고 방식과 기능적 언어와는 매우 다른 사고 방식이 필요하다는 데 동의합니다. 특정 시점을 넘어 서면, 많은 경험이 필요한 것 같습니다 (무엇이든 마찬가지입니다). 그리고 뇌가 내 귀에서 빠져 나가게하는 많은 “교과서”지식도 있습니다.
내 인상은 … 우리 둘 다 어느 정도 특별한 것을 놓치고 있을지 모르지만, 실제 경험을 개발하는 것은 물론, Prolog에 대해 합리적으로 완전한 교과서 수준의 지식조차 배우는 데 시간을 투자하는 것은 실용적이지 않을 것입니다. 가능한 논리 프로그래밍 경력을 고려하지 않는 한
저는 최근 1989 년에 출판 된 AI 및 전문가 시스템에 관한 책을 읽었습니다. 중고 서점에서 운이 좋은 곳입니다. 중요한 부분은 Lisp 및 Prolog에 대한 전문 자습서입니다. 사실, 그것이 다루는 것의 대부분은 꽤 오랫동안 인상적이지 않았지만 (검색, 휴리스틱 등) 여전히 흥미 롭습니다 .IMO는 약간의 시간을 투자 할 가치가 있습니다.
Prolog를 구체적으로 설명하는 최신 책은 언어를 배우는 데 더 좋을 것입니다. 그러나 위험은 뇌가 중급에서 고급까지 어딘가에 귀에서 빠져 나오는 것입니다.
답변
이것은 내가 아니었지만 질문이 “누군가 프롤로그에 심각한 것을 구현 했습니까?” 이것은 계산할 수 있습니다 :
http://asmarterplanet.com/blog/2011/02/the-watson-research-team-answers-your-questions.html
Watson은 Linux를 실행하는 10 개의 IBM Power 750 서버 랙으로 구동되며 15 테라 바이트의 RAM, 2,880 개의 프로세서 코어를 사용하며 80 테라 플롭에서 작동 할 수 있습니다. Watson은 대부분 Java로 작성되었지만 C ++ 및 Prolog로 작성된 상당량의 코드가 작성되었으며 모든 구성 요소는 UIMA를 사용하여 배포 및 통합됩니다.
답변
나는 AI 프로그래머가 그것을 사용한다는 것을 알고있다. 나는 AI 수업에서 프롤로그 코스를했기 때문에 다른 것에 대해서는 언급하지 않았다. 여기 lotsa 답변과 비슷한 질문이 있습니다!
/programming/130097/real-world-prolog-usage
답변
프롤로그는 빠른 프로토 타이핑에 좋습니다. 예를 들어, http://www.cri.ensmp.fr/classement/doc/A-381.pdf 에서 GCC에 대한 SSA 변환은 먼저 Prolog에서 구현 된 다음 C에서 구현됩니다.
형식 시스템의 빠르고 더러운 구현, 특정 최적화 및 의미 검사를 위해 컴파일러 내부에서 Prolog를 사용하고 있으며 성능이 만족스럽지 않은 경우에만 해당 Prolog 코드를 중요한 것으로 다시 작성합니다.
답변
당신은 매우 빨리 대답했지만 90 년대 중반에 Prolog를 사용하여 보험료율 계산기를 설계하여 보험료율에 맞는 특정 고객 세그먼트 (읽기 위험)를 결정했습니다. 반드시 매일 볼 필요는 없지만 수년간 P & C 보험료에 영향을 미쳤습니다.
답변
(본 FAQ)에 의하면 1 개 왓슨 부분의 위험을 연주 IBM 머신은 도입부에 기록 하였다. (질문 # 6 참조)
답변
나는 (중요한) 소수의 경우 (진단 전문가 시스템; HTML 변환; 멤버십 설정)에서 Prolog를 전문적으로 사용했습니다. 내가 예, 바이어스가 여기에있다, 그래서 언어에 대한 깊은 애정을 가지고 있지만 프롤로그 인 경우에 대한 객관적 쉽게 (더 / 마찬가지로) 당신이 정말로 처리 할 필요가 suitable- 순환 구조를 ; 내가 줄 수있는 가장 좋은 예는 관계형 데이터베이스 테이블이지만 무수히 많은 다른 예가 있습니다 (아마도 사용자 입력 또는 (대부분) 수학 함수와 같은 카운터 예를 열거하는 것이 더 쉽습니다 (그러나 많은 수학 함수는 재귀 구조를 가지고 있으므로 따라서) 완벽하게 적합합니다 (예 : 이산 고속 푸리에 변환).
그러나 물론 재귀 구조의 처리 측면에서만 ‘엔드-투-엔드 시스템’을 정의 할 수있는 것은 거의 없습니다 (예외 : 이론 증명-하지만 이것은 다소 학문적 인 연습 *). 따라서 프롤로그 프로세스는 운이 좋습니다. 모든 종류의 서로 다른 기술을 사용하여 ‘표준 표준 프로세스’에 접목 할 수 있습니다 (웹 서비스 인터페이스가 아닌 일반적으로 적합한 것은 거의 중요하지 않습니다). 따라서 UI, 임의 이벤트 처리 등을 처리 한 다음 필요한 경우 핸드 오버 할 수 있습니다 (복잡한 데이터베이스 쿼리 또는 재귀 구조로 수행 할 수있는 여러 작업 수행). 예를 들어 LINQ보다 아름답게 작동합니다.
민감한 비트로 재귀 구조를 파악하고 아름답고 깨끗하며 우아하고 유지 보수가 가능한 프롤로그를 작성하십시오! 🙂
PS를 Prolog를 사용하지 않을 때 C #으로 넘어갑니다.
- 그러나 상업 프로그램의 적어도 일부 측면이 표준 관행으로 올바른 것으로 판명 된 날은 그리 오래 갈 것입니다.