Vì Prolog = Hợp nhất cú pháp + Xâu chuỗi ngược + REPL
Tất cả ba phần có thể được tìm thấy trong Trí tuệ nhân tạo: cấu trúc và chiến lược để giải quyết vấn đề phức tạp của George F. Luger. Trong phiên bản thứ tư của cuốn sách, cả ba phần được triển khai trong LISP trong Phần 15.8, Lập trình logic trong LISP. Anh ấy cũng đặt mã tương tự trong các cuốn sách khác của mình, nhưng tôi không có tất cả chúng để ghi chú ở đây. Mã cho các cuốn sách của mình có thể được tìm thấy ở đây .
Một nguồn khác với cả ba phần có thể được tìm thấy trong Paradigms của lập trình trí tuệ nhân tạo: nghiên cứu trường hợp trong Common Lisp của Peter Norvig. Xem Chương 11, Lập trình logic và 12, Biên dịch chương trình logic. Mã cho cuốn sách của mình có thể được tìm thấy ở đây .
Một nguồn khác là Cấu trúc và giải thích các chương trình máy tính của Hal Abelson, Jerry Sussman và Julie Sussman. Xem phần 4.4 Lập trình logic. Trang web cho cuốn sách ở đây và mã cho cuốn sách ở đây .
Không có gì lạ khi tìm thấy thuật toán hợp nhất với chuỗi ngược được triển khai trong nhiều ứng dụng nếu bạn biết tìm ở đâu; nó đặc biệt phổ biến trong kiểu suy luận trong trình biên dịch chức năng. Sử dụng các từ khóa thống nhất hoặc xảy ra giúp phát hiện các chức năng. Ngoài ra hầu hết các triển khai sử dụng unif cho tên của hàm thống nhất.
Đối với phiên bản Prolog, trừ REPL, được thực hiện trong OCaml, hãy xem Mã và tài nguyên cho "Sổ tay logic thực tế và lý luận tự động" - prolog.ml
Một bản dịch của mã sách sang F # có thể được tìm thấy ở đây . Một bản dịch của mã sách sang Haskell có thể được tìm thấy ở đây .
Về mặt tìm mã, thuật toán hợp nhất là dễ tìm nhất, sau đó triển khai với chuỗi nối lại được nhúng trong các ứng dụng. Tìm kiếm một triển khai đầy đủ chức năng của Prolog bằng ngôn ngữ chức năng với REPL là khó nhất. Hầu hết thời gian mã không ở định dạng để sử dụng trực tiếp trong PRITAL; nó được tùy chỉnh rất nhiều để nâng cao hiệu suất, vì vậy bạn có thể tìm thấy mã nhưng nó sẽ không đáng giá để trêu chọc những phần bạn muốn. Lời khuyên của tôi là đọc cuốn sách của Luger và xây dựng nó từ đầu bằng ngôn ngữ bạn chọn, ngay cả khi nó có nghĩa là cài đặt và học LISP và dịch để làm như vậy.
CHỈNH SỬA
Vì đây là một câu hỏi trùng lặp từ StackOverflow và OP là mới và trong các ý kiến cho biết:
Để cung cấp thêm ngữ cảnh, tôi đang cố gắng thực hiện suy luận kiểu, tuy nhiên các tính năng phức tạp trong hệ thống loại ngôn ngữ của tôi (loại phụ thuộc, loại tinh chỉnh, gõ tuyến tính để đặt tên cho một số loại ít phổ biến hơn) khiến tôi cảm thấy rằng nó sẽ sẽ hữu ích để dựa vào loại suy luận của tôi về các thuật toán điều khiển Prolog để có được một thuật toán rất chung chung. Tôi sẽ lưu ý rằng tôi hoàn toàn tự học, vì vậy kiến thức của tôi còn thiếu trong các lĩnh vực lớn.
Tôi sẽ mở rộng về vấn đề này ở đây, nhưng nhận ra OP nên hỏi một câu hỏi mới.
Đối với một số công cụ giới thiệu xem thực hiện suy luận loại .
Cuốn sách hay nhất mà tôi biết về điều này là Các loại và ngôn ngữ lập trình của Benjamin C. Pierce. Trang web của cuốn sách ở đây . Các tài nguyên với các liên kết đến mã OCaml là ở đây . Và gần đây đã bắt đầu nhưng chủ yếu là hoàn thành bản dịch này sang F # ở đây .
Các loại phụ thuộc: pg. 462 Các loại sàng lọc: pg. 207 Hệ thống logic và loại tuyến tính: pg. 109