Умножьте десятичные числа - PullRequest
0 голосов
/ 23 марта 2019

Я новичок и ищу способ интеграции clingo и Python таким образом, чтобы я мог получить что-то вроде этого:

probability("0.7")
probability("0.3")
probability("0.1")

prod(X) :-
    X = @product{ X : probability(X) }

где «product» - это определенная Python-функция для умножения всех чисел в скобках. Очевидно, это не работает. Как кто-то сказал в другом потоке , возможное решение заключается в использовании такой стратегии:

#script(python)
def product(x,y):
return str(float(x.string) * float(y.string))
#end.

probability("2.0"; "0.5"; "1.0").

order(X,N) :- N = {X<Y:probability(Y)};probability(X). % orders the probabilities
res(X,0) :- order(X,0).
res(@product(X,Y),N) :- res(X,N-1); order(Y,N). % iterative multiplication

prod(X) :- res(X,N); not res(_,N+1). % the final result

Тем не менее, я был бы счастлив с чем-то более похожим на то, что я написал, и я был бы очень признателен, если бы кто-нибудь мог указать мне правильное направление. Возможно, я смогу подготовить основную функцию в основной функции таким образом, чтобы я мог применить @product, когда доступно все расширение предиката «product»? Или я могу использовать пропагаторы для этого, может быть? Любой совет будет очень признателен !!

Приветствия

Fabio

...