Я новичок и ищу способ интеграции 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