Я пытаюсь понять, почему следующая функция product-pluso
возвращает неожиданные результаты. Я нашел ошибку или я не понимаю, как это работает? Я использую core.logic с CLP/FD. Я все еще участвую, поэтому я мог бы сделать это неправильно. Функция должна принимать два фактора, число и сумму. Сумма должна быть произведением факторов плюс число. Он отлично работает, если оба фактора не свежие. Затем я получаю странные результаты. Это происходит с core.logic v0.8.2.Неожиданные результаты с Clojure core.logic (с использованием CLP/FD)
(ns strang-result
(:refer-clojure :exclude [==])
(:use
clojure.test
[clojure.core.logic :exclude [is]])
(:require
[clojure.core.logic.fd :as fd]))
(defn product-pluso [factor1 factor2 number sum]
(fd/eq (= sum (+ number (* factor1 factor2)))))
(run* [x y]
(fd/in x y (fd/interval 1 38))
(product-pluso x y 2 40))
;=> ([1 38] [2 19] [3 13] [4 10] [5 8] [6 7] [7 6] [8 5] [9 5] [10 4] [11 4]
; [12 4] [13 3] [14 3] [15 3] [16 3] [17 3] [18 3] [19 2] [38 1])
Чтобы уточнить, каждая пара [x y] должна умножаться на 38 (38 + 2 = 40), но многие этого не делают. –