2013-07-16 40 views
9

Tôi đã rất ngạc nhiên trước sức mạnh của Prolog. Phải mất một thời gian để có được người đứng đầu xung quanh, nhưng đối với tôi nó dường như là ngôn ngữ khai báo tuyệt vời nhất ở đó. Đó là lý do gần đây, sau hai năm của một số lập trình chức năng với Scala, tôi quyết định xem xét lập trình logic một lần nữa, để "đào tạo não của tôi" hoặc tốt hơn cho việc sử dụng thực tế.Ngôn ngữ chức năng logic hữu dụng và hữu ích nhất để học

Kết hợp lập trình hàm và logic có vẻ hấp dẫn đối với tôi để tìm hiểu/củng cố các khái niệm về cả hai mô hình khai báo. Tôi cũng tìm thấy hệ thống kiểu mạnh mẽ rất hữu ích và hấp dẫn.

Scala thực sự tỏa sáng với interop. Chúng ta không phát minh lại bánh xe. Nó sẽ có thể gọi mã bằng ngôn ngữ chính khác, và thích hợp hơn để có thể gọi được. Nhưng nó không phải là Java. C hoặc Haskell cũng sẽ ổn.

Vì vậy, đó là ngôn ngữ FLP hữu ích và khai sáng nhất hiện nay và ý kiến ​​và đề xuất của bạn về chúng là gì?

Dưới đây là những gì tôi tìm thấy cho đến nay:

  1. Mercury: tuyên bố là nhanh chóng, mạnh mẽ gõ Prolog. Khai báo thuần túy, nhưng không có biến hợp lý! Không có lập trình ràng buộc? Có vẻ là FLP được sử dụng rộng rãi nhất. Interop ??

  2. Curry: có vẻ đầy hứa hẹn và tiên tiến nhất, nhưng hiện tại có chút ít tài liệu. "Thử nghiệm" có nghĩa là chưa trưởng thành/chưa sẵn sàng để đi sâu vào? chỉ dựa trên Haskell hoặc thực sự tốt interop với Haskell?

  3. Ciao: dường như cung cấp nhiều tính năng tôi muốn, nhưng Stack Overflow dường như không biết gì cả, mặc dù nó tồn tại từ năm 1984? Có gì sai với nó? Interop?

  4. drools (thư viện java/DSL): xác nhận quyền sở hữu nó cho phép lai chuỗi chuyển tiếp và ngược. Trưởng thành. Interop trực tiếp với Java/Scala, nhưng dựa vào dữ liệu có thể thay đổi/cấu trúc bắt buộc? Nó tích hợp với các ngôn ngữ JVM chức năng như thế nào?

  5. miniKiểm tra: triển khai tồn tại trên một số nền tảng. Làm thế nào là interop? Hiệu quả?

  6. Lambda Prolog triển khai như:

    1. Caledon: Có thể là tốt đẹp, nhưng nặng về lý thuyết. Tính hữu dụng? Interop hiệu quả với Haskell? Tài liệu?

    2. Teyjus. tương tự như Caledon.

Tốt nhưng lý thuyết đọc và thiên vị đối với cà ri và không giải quyết mối quan tâm thực hiện:

+0

Tôi không phải là chuyên gia nhưng Curry có vẻ là người hứa hẹn nhất: nó trông giống như Haskell vì vậy nó đọc đẹp hơn Prolog & Mercury (nhưng YMMV); bạn có thể viết các hàm thuần túy "thông thường" trong nó giống như bạn làm trong Haskell; và bạn có thể gọi Haskell từ nó. - Tất cả trong tất cả, nó chỉ cảm thấy giống như một Haskell với logic mạnh mẽ và các tính năng lập trình hạn chế (chẳng hạn như các mẫu chức năng) được thêm vào, trái ngược với một mô hình hoàn toàn riêng biệt để thích nghi. –

Trả lời

4

Tôi có thể đưa ra cho bạn một đề nghị thiên vị (hơi) cho Curry.

Như bạn đã đề cập, Curry khá tiên tiến và, trong khi vẫn thử nghiệm, chắc chắn sẵn sàng để được sử dụng. Đã có các ứng dụng trong sử dụng hiệu quả. Bạn sẽ không tìm thấy nhiều lần đọc về các khía cạnh thực tế vì Curry chủ yếu là một ngôn ngữ nghiên cứu. Tuy nhiên, có một đọc cộng đồng nhỏ nhưng hữu ích và trả lời các Curry Danh sách Email:

http://www-ps.informatik.uni-kiel.de/currywiki/documentation/mailing

Về khả năng tương tác, hình như vẫn có hai lựa chọn: Các Münster Curry Compiler (MCC) hỗ trợ một tập hợp con của Haskell nước ngoài giao diện chức năng để gọi mã C.

Việc thực hiện Curry gần đây nhất, hệ thống cà ri Kiel 2 (KiCS2), biên soạn Curry thành Haskell. Có một cách sơ đồ để gọi mã Haskell từ Curry khi sử dụng KiCS2 (xem KiCS2 Manual, Phụ lục D). Thật không may, tôi không biết cách gọi mã Curry từ ngôn ngữ khác.

+1

Cảm ơn câu trả lời, cà ri là món ăn yêu thích của tôi, nghe có vẻ thú vị, nhưng tôi vẫn còn hơi hoài nghi nếu điều này thực sự sẵn sàng cho những người chưa chuyên nghiệp. Có cơ hội nào các tài liệu có thể được điều chỉnh và hoàn thành cho các học giả không? Tôi đang nhìn vào hướng dẫn, nhưng nó khá dài. Một số giới thiệu khác, bắt đầu và hướng dẫn thực dụng? Điều này sẽ rất hữu ích. – ib84

+1

Tôi nghĩ rằng sự hoài nghi của bạn là hợp pháp. Có rất ít tài nguyên hướng đến người mới bắt đầu. Tôi nghĩ điều tốt nhất là tìm hướng dẫn Haskell, ví dụ: http://learnyouahaskell.com/ và sau đó xem xét sự khác biệt với Curry. Wolfgang Jeltsch gần đây đã xuất bản một bài đăng trên blog về Curry có thể hữu ích: http://jeltsch.wordpress.com/2013/04/27/a-taste-of-curry/ Và có một số chương trình ví dụ có thể được tìm thấy tại trang web Curry: http://www.informatik.uni-kiel.de/~curry/examples/ – Fabian

+1

Có thể bạn muốn xem qua một khóa học về sự cố về Curry mà gần đây được tổ chức bởi Sebastian Fischer: http: //sebfisch.github.io/research/talks/CurryCrashCourse.pdf (các chương trình tương ứng: http://sebfisch.github.com/research/talks/CurryCrashCourse.zip) – ichistmeinname

0

Mối quan hệ sâu sắc và hữu ích nhất của FP và LP, theo như tôi đã tìm thấy, Mercury + Erlang. Cả hai đều thú vị từ quan điểm học tập (bạn thực sự cần phải có các nguyên tắc cơ bản của bạn thẳng nếu bạn muốn làm những điều tốt với một trong hai, hoặc cả hai), nhưng cả hai cũng đặt một phí bảo hiểm để đưa sản phẩm ra thị trường và duy trì chúng như trái ngược để được nghiên cứu kỳ quặc. Tôi không thực sự chắc chắn liệu OP có trọng số "hữu ích" lớn hơn "hướng dẫn" hay không, và tôi cũng không biết liệu "hữu ích" có nghĩa là "mã giải quyết vấn đề trong thế giới thực một cách hữu ích" hay không. Nhưng giả định rằng đây là một phần của tiêu chí ở đây, Mercury + Erlang là sự kết hợp thú vị nhất của LP và FP hiện tại.

Các vấn đề liên quan