求SWI-Prolog中满足特定不变量规则的generator1_inv谓词
实现SWI-Prolog谓词
generator1_inv 需要实现SWI-Prolog谓词generator1_inv/4,参数定义如下:
+ListIn:输入列表,元素包含普通项与形如Inv(bi)的项(已知Inv(a) = a)-ListOut:转换后的输出列表+Inv:指定的逆函数符(如示例中的k)+Order:对目标项连续应用Inv的次数
转换规则
- 输出列表
ListOut中的成员相对于Inv唯一:不会同时存在项X和满足Inv(Y)=X的项Y - 若输入列表
ListIn中同时存在项a和满足Inv(b)=a的元素,输出列表ListOut中保留的是对a连续应用Order次Inv的结果,而非a本身
示例
示例1
?- generator1_inv([k(a), a, k(k(a)), v, b ], ListOut, k, 1). ListOut = [k(a), v, b].
示例2
?- generator1_inv([k(a), r(a), a, k(k(a)), v, b ], ListOut, k, 1). ListOut = [k(a), r(a), v, b].
示例3
?- generator1_inv([r(a), a, r(abc), d(a), k(k(a)), v, b ], ListOut, k, 1). ListOut = [r(a), k(a), r(abc), d(a), v, b].
示例4
?- generator1_inv([r(a), a, r(abc), d(a), k(k(a)), v, b ], ListOut, k, 0). ListOut = [r(a), a, r(abc), d(a), v, b].
内容的提问来源于stack exchange,提问作者Martin Kunze
相关产品推荐
相关产品推荐

