-2

这些是我的事实:

%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]).
4

1 回答 1

3

Prolog算术有点麻烦。假设您有一个数字列表,您将需要(至少)一个 2 参数谓词来完成乘法运算:

multiply_list([N], N).
multiply_list([N|Ns], M) :-
  multiply_list(Ns, T), M is N * T.

可以使用 maplist/3 或 findall/3 将房间列表映射到数字列表

高温高压

于 2013-03-13T22:52:33.110 回答