Prolog编写replace1谓词:实现任意元素替换为自身相乘形式
问题原因
原有代码的问题出在is/2谓词的使用:is/2会对右侧表达式做算术求值,仅支持数字类型的操作数,遇到aa这类原子时会抛出异常,和你要构造元素*元素复合项的需求不匹配。
修改方案
你不需要对表达式做算术求值,直接让输出列表的对应位置元素和X*X合一即可,同时原有代码中的截断!没有必要可以删除,修改后代码如下:
replace1([], []). replace1([X | Xs], [X * X | Zs]) :- replace1(Xs, Zs).
效果验证
执行查询replace1([1, aa, 3], L2).,即可得到预期结果:L2 = [1 * 1, aa * aa, 3 * 3].
内容的提问来源于stack exchange,提问作者bami77
相关产品推荐
相关产品推荐

