list - Prolog:从列表中随机选择规则并传递参数

标签 list prolog parameter-passing rule

我正在尝试编写 prolog 代码以从列表中选择一个随机规则,然后执行它。这是我让它工作的程度:

/* Rules */
rule1 :- write('1').
rule2 :- write('2').
rule3 :- write('3').

/* List of rules */
list([rule1,rule2,rule3]).

/* Rule to select random rule from list */
findRule :- random_between(0,2,Elem),
            list(L),
            nth0(Elem,L,Rule),
            Rule.

产生(例如)这个结果:

|: findRule.
2
true.

但是,我想将参数传递给规则,例如:

/* Rules */
rule1(X) :- write(X), write('1').
rule2(X) :- write(X), write('2').
rule3(X) :- write(X), write('3').

/* List of rules */
list([rule1,rule2,rule3]).

/* Rule to select random rule from list */
findRule(X) :- random_between(0,2,Elem),
            list(L),
            nth0(Elem,L,Rule),
            Rule(X).

要产生这样的结果:

|: findRule(hallo).
hallo2
true.

这是行不通的。我已经考虑过用动态列表尝试同样的事情,但我想先检查一下,是否有更简单的问题解决方案..

最佳答案

使用call/2为了满足最后一个目标:

findRule(X):-
    random_between(0,2,Elem),
    list(L),
    nth0(Elem,L,Rule),
    call(Rule,X).

关于list - Prolog:从列表中随机选择规则并传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27838667/

相关文章:

recursion - 使用 Prolog 中其他谓词返回的值递归构建列表

prolog - lib(ic) 的精确解

python - 从两个不同的列表中删除重复的行?

c - 填充单链表节点

python - 列表中出现频率最高的数字

list - 在 Common Lisp 列表中交换元素

parsing - 在递归下降解析器中实现 "cut"

python - 参数 : passed by reference vs passed by name

java - 将不同的类作为参数传递给 Java 函数

ruby - 如何将传入的参数传递给另一个方法?