Prolog析因非递归

时间:2017-01-19 00:44:06

标签: prolog factorial

如何将此转换为非递归。这段代码推出了N的阶乘。

findSolution

2 个答案:

答案 0 :(得分:3)

在您的定义中没有递归调用的情况下,有一种方法是:

numlist/2

这种方法避免了定义中语法级别的递归。 foldl/4for (int i = 1; i < 31; i++) { var getData = "SELECT * FROM Test WHERE date = '" + inputDate + "'"; sumKG = 0; foreach (var c in db.Query(getData)) { var total = c.kg * c.rep * c.sett; sumKG += total; } inputDate = inputDate.AddDays(1); @sumKG <br /> } 都很可能具有递归定义,但您不必 查看它。这可能属于&#34; d)我缺少的其他东西&#34;类别from my comment to your question

答案 1 :(得分:-1)

如果您的Prolog有global variables,您可以

fakultaet(N,F) :-
    nb_setval(f,1),
    forall(between(2,N,I), (nb_getval(f,T), G is T*I, nb_setval(f,G))),
    nb_getval(f,F).

nb_setval / 2,nb_getval / 2的这种特殊用法可以用assert / 1,retract / 1进行部分模拟,但结果程序效率非常非常低