내가 core.logic에 쿼리를 입력 시도 :core.logic
(run* [q] (== 0 (+ (* q q) (* 4 q) 4)))
그리고 프롬프트는 말한다, 내가하지 않은 경우에
error: lvar cannot be cast to a number
완전히 논리 프로그래밍에 대해 잘못 이해하고 있습니다.이 문제는 core.logic을 사용하여 해결할 수있는 방법이 있습니까?
내가 core.logic에 쿼리를 입력 시도 :core.logic
(run* [q] (== 0 (+ (* q q) (* 4 q) 4)))
그리고 프롬프트는 말한다, 내가하지 않은 경우에
error: lvar cannot be cast to a number
완전히 논리 프로그래밍에 대해 잘못 이해하고 있습니다.이 문제는 core.logic을 사용하여 해결할 수있는 방법이 있습니까?
지금까지 core.logic이 방정식을 풀기 위해 대수학을 할 수 없다는 것을 알았습니다.
user> (run* [q]
(fresh [x]
(== x 1)
(project [x] (== q (+ (* x x) 4)))))
(5)
작품 x는 명확한 값을 가지고 있으며, x가없는 경우 실패 할 때 : 그 수학에 대한 입력이 수학 함수는 다음에서 작동 할 수 없기 때문에하지 LVar
의 실제 값을해야하지만 그것은 기본적인 수학을 할 수 :
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
아이디어를 얻으려면 Reasoned Schemer를 읽어야합니다. 기본적으로 논리 프로그램에서 수학을 수행하는 방법은 목록 기반의 숫자 인코딩을 생성하는 것입니다. 논리 엔진은 필요한만큼 키울 수 있으므로 문제를 해결할 수 있습니다. 나는이 책을 편리하게 가지고 있지는 않지만 정수를 비트 목록으로 인코딩한다. 다소 이상한 방식으로 나는 아마도 기억할 수 없다. 어쩌면 (1)
은 0을 나타내고, (0)
은 불법이며, MSB는 목록에 마지막인가?
어쨌든, 그것은 많은 작업입니다. David Nolen은 최근 core.logic에 유한 도메인에 대해 소개했습니다. 어떻게 작동하는지 모르지만 문제의 해결 방법으로 고려해야 할 숫자의 종류를 지정하여 문제를 간단하게 처리 할 수 있다고 생각합니다.
core.logic의 형식은 수치 방정식 해석기로 설계되지 않았으므로 논리식 및 관계식을 해결하는 것이 더 적절합니다. 당신은 기본적으로 수학 방정식을 해결하기위한 두 개의 실제 경로가
:
수식 해결사는 수학 방정식의 "규칙"을 이해하는 특수 인텔리전스 (분석 솔루션 용) 다항식 표현 방법 또는 파생 솔루션 추정 방법 (수치 솔루션 용).흥미로운 일이 될 수 있습니다
일부 링크 :
내가 페이지를 발견 https://github.com/frenchy64/Logic-Starter/wiki/그것을 통해가는 산술 – zcaudate
아마 arithmatic는 core.logic atm의 도메인이 아니라고 생각합니다. – zcaudate