순전히 기능적인 언어로 프롤로그 인터프리터를 구현하는 방법은 무엇입니까?


25

순전히 기능적인 언어로 Prolog 인터프리터를 구현하는 방법에 대한 의사 코드와 함께 명확한 참조가 있습니까? 지금까지 내가 찾은 것은 명령형 언어만을 다루는 것처럼 보이거나, 그 자체로 구현 된 Prolog의 데모 일 뿐이며, 해석에 사용할 구체적인 알고리즘을 제공하지 않습니다. 나는 대답에 매우 감사하겠습니다.


4
Patrice Boizumault의 Prolog (컴퓨터 과학의 프린스턴 시리즈) 구현에는 Lisp 구현이 있습니다.
Will Ness

비교적 새로운 접근 방식 은 이 답변 을 참조하십시오 .
false

답변:


24

이후 프롤로그 = 신택 틱 통일 + 후방 추론 + 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


1
가이 코더, 당신은 신사이자 학자입니다! 귀하의 지원이 가장 유용하며 실제로이 질문에 답변하기 위해 시간을내어 주셔서 감사합니다. = D-Jimster의 공동 연구자 및 연구에 지친 친구
Shenzao

다시 한 번 감사드립니다, 나는 이미이 책들을 얻었습니다 (이전에는 서점으로 빠르게 여행하지 않습니다).
Jimster

@Jimster Norvig의 코드는 훌륭하고 명확하며 IIRC 페이지에 적합합니다. 그것이 순수 한지 기억하지 마십시오 .
Will Ness

또 하나를 찾았습니다. 강의 26 : 유형 유추와 통일
가이 코더

관심사 : 과제 2의 일부인 unify_P3.py
Guy Coder

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