我正在尝试编写 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/