十进制数字相乘

时间:2019-03-22 23:16:05

标签: answer-set-programming clingo

我是新手,我正在寻找一种将clingo和Python集成在一起的方法,这样我就可以得到这样的东西:

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

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

其中“ product”是一些python定义的函数,用于将方括号内的所有数字相乘。显然,这是行不通的。正如某人在another thread上所说的那样,一种可能的解决方案是使用这种策略:

#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

0 个答案:

没有答案