Prolog'dan beri = Sözdizimsel Birleşme + Geri zincirleme + REPL
Her üç bölüm de Yapay zekada bulunabilir: George F. Luger tarafından karmaşık problem çözme yapıları ve stratejileri . Her üç parça halinde uygulanmaktadır kitabın dördüncü baskısında LISP Bölüm 15.8 yılında, Mantık LISP'de Programlama. Ayrıca aynı kodu diğer kitaplarına da koyuyor, ancak hepsine burada kaydettiğim için elimde değil. Kitaplarının kodu burada bulunabilir .
Üç bölümün de bulunduğu bir başka kaynak , yapay zeka programlamasının paradigmalarında bulunabilir : Peter Norvig tarafından Common Lisp'te vaka çalışmaları . Bkz. Bölüm 11, Mantık Programlama ve 12, Mantık Programlarının Derlenmesi. Kitabının kodu burada bulunabilir .
Diğer bir kaynak ise bilgisayar programlarının Hal Abelson, Jerry Sussman ve Julie Sussman tarafından yorumlanması . Bkz. Bölüm 4.4 Mantık Programlama. Kitabın sitesi burada ve kitabın kodu burada .
Nereye bakacağınızı biliyorsanız, birçok uygulamada uygulanan geri zincirleme ile birleştirme algoritmasını bulmak nadir değildir; özellikle fonksiyonel derleyicilerde tip çıkarımında yaygındır. Anahtar kelimelerin birleştirilmesi veya meydana gelmesi anahtar kelimelerin kullanılmasına yardımcı olur. Ayrıca çoğu uygulama, birleştirme işlevinin adı için unif kullanır.
Prolog'un bir sürümü için, OCaml'de yapılan REPL'den az, "Pratik Mantık ve Otomatik Muhakeme El Kitabı" için Kod ve kaynaklar bölümüne bakın - prolog.ml
Kitap kodunun F # 'ya çevirisi burada bulunabilir . Kitap kodunun Haskell'e çevirisi burada bulunabilir .
Kod bulma açısından, birleştirme algoritmasının bulunması en kolay olanıdır, daha sonra uygulamalara gömülmüş arka zincirleme ile uygulamalar. Prolog'un tamamen işlevsel bir uygulamasını REPL ile işlevsel bir dilde bulmak en zorudur. Çoğu zaman kod, PROLOG içerisinde doğrudan kullanım için bir biçimde değildir; performansı artırmak için yoğun şekilde özelleştirilmiştir, bu nedenle kodu bulabilirsiniz, ancak istediğiniz parçaları çıkarmak için buna değmez. Tavsiyem Luger'in kitabını okumak ve LISP'i kurmak, öğrenmek ve tercüme etmek anlamına gelse bile, seçtiğiniz dilde sıfırdan oluşturmak olacaktır.
DÜZENLE
Bu StackOverflow gelen yinelenen bir soru olduğundan ve OP yeni ve yorumlarda şöyle diyor:
Daha fazla bağlam vermek için, tür çıkarımı uygulamaya çalışıyorum, ancak dilimin tür sistemindeki karmaşık özellikler (Bağımlı türler, ayrıntılandırma türleri, daha az yaygın olanları adlandırmak için doğrusal yazım) benim tür çıkarımı çok genel bir algoritma elde etmek için Prolog kullanan algoritmalara dayandırmak için faydalı olabilir. Tamamen kendi kendime öğrendiğimi not edeceğim, bu yüzden bilgim geniş alanlarda eksik.
Burada bunun üzerine genişleyeceğim, ancak OP'nin yeni bir soru sorması gerektiğini fark ettim.
Bazı girişler için, bkz . Tür çıkarımı .
Bu konuda bildiğim en iyi kitap Benjamin C. Pierce'in türleri ve programlama dilleri . Kitabın sitesi burada . OCaml koduna bağlantılar içeren kaynaklar burada . Ve son zamanlarda başladı ama çoğunlukla bunun F # 'ya tam çevirisi burada .
Bağımlı türler: sf. 462 Arıtma tipleri: sf. 207 Doğrusal mantık ve tip sistemleri: sf. 109