순전히 기능적인 언어로 Prolog 인터프리터를 구현하는 방법에 대한 의사 코드와 함께 명확한 참조가 있습니까? 지금까지 내가 찾은 것은 명령형 언어만을 다루는 것처럼 보이거나, 그 자체로 구현 된 Prolog의 데모 일 뿐이며, 해석에 사용할 구체적인 알고리즘을 제공하지 않습니다. 나는 대답에 매우 감사하겠습니다.
순전히 기능적인 언어로 Prolog 인터프리터를 구현하는 방법에 대한 의사 코드와 함께 명확한 참조가 있습니까? 지금까지 내가 찾은 것은 명령형 언어만을 다루는 것처럼 보이거나, 그 자체로 구현 된 Prolog의 데모 일 뿐이며, 해석에 사용할 구체적인 알고리즘을 제공하지 않습니다. 나는 대답에 매우 감사하겠습니다.
답변:
이후 프롤로그 = 신택 틱 통일 + 후방 추론 + REPL
세 가지 부분 모두 인공 지능 에서 찾을 수 있습니다 . George F. Luger의 복잡한 문제 해결 을 위한 구조와 전략 . 이 책의 제 4 판에서 세 부분은 모두 15.8 절, LISP의 논리 프로그래밍의 LISP 에서 구현됩니다 . 그는 다른 책에도 같은 코드를 넣었지만 여기에 언급 할 코드가 모두 없습니다. 그의 책에 대한 코드는 여기 에서 찾을 수 있습니다 .
Peter Norvig의 Common Lisp 사례 연구에서 인공 지능 프로그래밍의 패러다임 에서 세 부분이 모두 포함 된 다른 소스를 찾을 수 있습니다 . 11 장, 논리 프로그래밍 및 12 장, 논리 프로그램 컴파일을 참조하십시오. 그의 책에 대한 코드는 여기 에서 찾을 수 있습니다 .
또 다른 출처는 Hal Abelson, Jerry Sussman 및 Julie Sussman 의 컴퓨터 프로그램 구조 및 해석입니다 . 4.4 논리 프로그래밍 섹션을 참조하십시오. 책의 사이트는 여기 있으며 의 코드는 여기에 있습니다 .
어디를보아야하는지 알고 있다면 많은 응용 프로그램에서 백 체인이 구현 된 통합 알고리즘을 찾는 것은 드문 일이 아닙니다. 함수형 컴파일러에서 형식 유추에 특히 많이 사용됩니다. 키워드 통일 또는 발생을 사용하면 기능을 찾는 데 도움이됩니다. 또한 대부분의 구현에서는 통일 함수의 이름으로 unif를 사용합니다.
Prolog 버전은 OCaml에서 수행 된 REPL이 적습니다. "실제 논리 및 자동화 된 추론 핸드북"에 대한 코드 및 리소스 -prolog.ml을 참조하십시오.
책 코드를 F #으로 번역 한 내용은 여기 에서 찾을 수 있습니다. . 도서 코드를 Haskell로 번역 한 내용은 여기를 참조하십시오 .
코드를 찾는 측면에서 통일 알고리즘은 가장 쉽게 찾은 다음 응용 프로그램에 백 체인이 포함 된 구현을 찾아냅니다. REPL을 사용하여 기능적 언어로 완전한 기능을 갖춘 Prolog 구현을 찾는 것이 가장 어렵습니다. 대부분의 경우 코드는 PROLOG 내에서 직접 사용할 수있는 형식이 아닙니다. 성능을 높이기 위해 크게 맞춤화되어 있으므로 코드를 찾을 수 있지만 원하는 부분을 애타게 할 가치가 없습니다. LISP를 설치하고 배우고 번역하는 것을 의미하더라도 Luger의 책을 읽고 선택한 언어로 처음부터 작성하는 것이 좋습니다.
편집하다
이것은 StackOverflow 의 중복 질문 이며 OP는 새로운 것이며 주석에는 다음과 같이 말합니다.
더 많은 맥락을 제공하기 위해 유형 유추를 구현하려고하지만 언어 유형 시스템의 복잡한 기능 (종속 유형, 구체화 유형, 덜 일반적인 유형의 이름을 지정하는 선형 입력)을 사용하면 느낌이들 것입니다. 매우 일반적인 알고리즘을 얻기 위해 Prolog를 구동하는 알고리즘에서 내 유형 유추를 기반으로하는 데 유용합니다. 나는 전적으로 자기 교육을 받았기 때문에 넓은 영역에서 지식이 부족합니다.
여기에서 확장하겠습니다. 그러나 OP가 새로운 질문을해야한다는 것을 알고 있습니다.
소개 내용은 형식 유추 구현을 참조하십시오. .
내가 아는 가장 좋은 책은 Benjamin C. Pierce의 타입과 프로그래밍 언어 입니다. 이 책의 사이트는 여기에 있습니다 . OCaml 코드에 대한 링크가있는 리소스는 여기에 있습니다 . 그리고 최근에 시작되었지만 F #으로의 대부분의 완전한 번역이 여기에 있습니다 .
종속 유형 : pg. 462 정제 유형 : pg. 207 선형 논리 및 유형 시스템 : pg. 109
내 프로그래밍 언어 동물원 에서 미니 프롤로그 구현을 참조하십시오 . 목록에서 마지막입니다. 소스 코드를 온라인 에서 볼 수 있으며 코드가 잘 정리되어 있습니다.