2012-09-25 29 views

Trả lời

5

Cho đến nay tôi có thể tìm thấy core.logic không thể làm đại số để giải phương trình này. Nó có thể làm toán cơ bản mặc dù đầu vào cho toán học mà cần phải có giá trị thực tế không LVar s vì các hàm toán học không thể hoạt động trên các:

user> (run* [q] 
    (fresh [x] 
     (== x 1) 
     (project [x] (== q (+ (* x x) 4))))) 
(5) 

công trình khi x có giá trị rõ ràng và không thành công khi x không :

user> (run* [q] 
    (fresh [x] 
     (== x q) 
     (project [x] (== q (+ (* x x) 4))))) 
ClassCastException clojure.core.logic.LVar cannot be cast to java.lang.Number 
5

Bạn nên đọc Schemer Reasoned for ideas. Về cơ bản cách để làm toán trong một chương trình logic là tạo ra các bảng mã dựa trên danh sách các số, mà công cụ logic có thể phát triển khi cần thiết để thử mọi thứ. Tôi không có cuốn sách tiện dụng, nhưng nó mã hóa số nguyên như một danh sách các bit, trong một số cách kỳ lạ tôi không thể nhớ lại: có thể (1) đại diện cho 0, (0) là bất hợp pháp, và MSB là cuối cùng trong danh sách?

Dù sao, đó là rất nhiều công việc; David Nolen gần đây cũng đã giới thiệu một cái gì đó về tên miền hữu hạn vào core.logic. Tôi không biết làm thế nào những công việc, nhưng tôi nghĩ rằng họ đơn giản hóa vấn đề rất nhiều cho bạn bằng cách cho phép bạn xác định những loại số để xem xét như là một giải pháp cho vấn đề của bạn.

+0

Tôi tìm thấy một trang https://github.com/frenchy64/Logic-Starter/wiki/Số học mà đi qua nó – zcaudate

+0

tôi đoán arithmatic không thực sự là tên miền cho core.logic atm – zcaudate

2

core.logic ở dạng hiện tại của nó không được thiết kế như một trình giải phương trình số - nó phù hợp hơn để giải các biểu thức logic và quan hệ.

Bạn về cơ bản có hai tuyến đường thực tế để giải quyết các phương trình toán học:

  • giải quyết Analytical - giải pháp có thể được tìm thấy khá dễ dàng đối với trường hợp đơn giản ví dụ phương trình bậc hai như phương trình bạn có ở trên, nhưng bắt đầu trở nên ngày càng phức tạp khá nhanh chóng và sau đó trở thành không thể/không khả thi đối với nhiều phương trình. Đây là một chủ đề nghiên cứu mở rộng lớn.
  • Giải mã số - các kỹ thuật này tổng quát hơn nhiều và có thể được sử dụng trên khá nhiều loại phương trình. Tuy nhiên, kết quả không chính xác và các thuật toán có thể không tìm được giải pháp đúng nếu phương trình có các tính năng "khó chịu" (gián đoạn, độ dốc lẻ, tập hợp phức tạp của minima cục bộ, v.v.)

trí thông minh đặc biệt để hiểu "quy tắc" của phương trình toán học, ví dụ làm thế nào để đưa ra các biểu thức đa thức (đối với các giải pháp phân tích) hoặc cách ước lượng một đạo hàm (đối với các giải pháp số).

Một số liên kết có thể là thú vị:

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