몇 년 전에 대학에서 프롤로그를 배웠습니다. 직업 생활 중에는 Prolog를 사용할 필요가 없었습니다. 내가 특별한 것을 놓친 적이 있습니까?
내가 기억하는 한, Prolog는 저명한 프로그래밍 언어와 비교할 때 완전히 다른 사고 방식이 필요합니다.
Prolog가 실제로 전문적으로 유용한 것을 구현하는 데 사용 되었습니까?
몇 년 전에 대학에서 프롤로그를 배웠습니다. 직업 생활 중에는 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 코드를 중요한 것으로 다시 작성합니다.
나는 (중요한) 소수의 경우 (진단 전문가 시스템; HTML 변환; 멤버십 설정)에서 Prolog를 전문적으로 사용했습니다. 내가 예, 바이어스가 여기에있다, 그래서 언어에 대한 깊은 애정을 가지고 있지만 프롤로그 인 경우에 대한 객관적 쉽게 (더 / 마찬가지로) 당신이 정말로 처리 할 필요가 suitable- 순환 구조를 ; 내가 줄 수있는 가장 좋은 예는 관계형 데이터베이스 테이블이지만 무수히 많은 다른 예가 있습니다 (아마도 사용자 입력 또는 (대부분) 수학 함수와 같은 카운터 예를 열거하는 것이 더 쉽습니다 (그러나 많은 수학 함수는 재귀 구조를 가지고 있으므로 따라서) 완벽하게 적합합니다 (예 : 이산 고속 푸리에 변환).
그러나 물론 재귀 구조의 처리 측면에서만 '엔드-투-엔드 시스템'을 정의 할 수있는 것은 거의 없습니다 (예외 : 이론 증명-하지만 이것은 다소 학문적 인 연습 *). 따라서 프롤로그 프로세스는 운이 좋습니다. 모든 종류의 서로 다른 기술을 사용하여 '표준 표준 프로세스'에 접목 할 수 있습니다 (웹 서비스 인터페이스가 아닌 일반적으로 적합한 것은 거의 중요하지 않습니다). 따라서 UI, 임의 이벤트 처리 등을 처리 한 다음 필요한 경우 핸드 오버 할 수 있습니다 (복잡한 데이터베이스 쿼리 또는 재귀 구조로 수행 할 수있는 여러 작업 수행). 예를 들어 LINQ보다 아름답게 작동합니다.
민감한 비트로 재귀 구조를 파악하고 아름답고 깨끗하며 우아하고 유지 보수가 가능한 프롤로그를 작성하십시오! :)
PS를 Prolog를 사용하지 않을 때 C #으로 넘어갑니다.