这些是我的事实:
%adjroom(Start,End,Key).
adjroom(corridor, room101,17).
adjroom(corridor, room102,3).
adjroom(corridor, room103,5).
adjroom(corridor, room104,20).
adjroom(corridor, store,18).
adjroom(corridor, lift,7).
adjroom(corridor, toilet,11).
adjroom(corridor, kitchen,2).
adjroom(kitchen, laundry,10).
adjroom(lift, lab,13).
我的问题:
需要实施新的安全策略。根据新政策,必须控制机器人进入房间。要实施此策略,每个机器人都有一个数字ID,表示机器人可以访问的房间。获得给定房间组的ID号的基本原理如下:ID号是通过乘以机器人需要访问的房间的所有关键代码获得的。例如,为了访问厨房,卫生间和房间102,需要生成以下ID 2 * 11 * 3 = 66(参见与每个房间相关联的代码的建筑物的计划)。编写PROLOG规则,给出一组房间生成与之关联的ID。
这是我的规则:
rr([ ]).
rr([Y,Y2|T]):-adjroom(X,Y,Z),adjroom(X2,Y2,Z2), Q is Z * Z2, print(Q),rr([Y2|T]).
答案 0 :(得分:3)
Prolog算术它有点麻烦。假设你有一个数字列表,你需要(至少)一个2参数谓词来完成乘法运算:
multiply_list([N], N).
multiply_list([N|Ns], M) :-
multiply_list(Ns, T), M is N * T.
将房间列表映射到数字列表可以使用maplist / 3或findall / 3
完成HTH