我在Prolog中编写谓词时遇到了问题:
在Prolog中,通过将每个元素替换为element * element形式的元素,定义一个谓词replace1(L1, L2),当列表L2从列表L1派生时,将满足该谓词。
示例:L1 = [1, aa, 3], L2 = [1 * 1, aa * aa, 3 * 3].
我尝试过这种方式,但这个谓词只对数字有效:
replace1 ([], []) :- !.
replace1 ([X | Xs], [Z | Zs]) :-
Z is X * X,
replace1 (Xs, Zs).发布于 2021-09-05 06:49:20
您正在使用算术求值运算符is/2。你只需要使用=就可以得到你想要的东西。
replace([], []).
replace([X|Xs], [Y|Ys]) :-
Y = X * X,
replace(Xs, Ys).这提供了:
| ?- replace([1, aa, 3], X).
X = [1*1,aa*aa,3*3]你也可以只在头部内部使用模式匹配:
replace([], []).
replace([X|Xs], [X*X|Ys]) :- replace(Xs, Ys).https://stackoverflow.com/questions/69059685
复制相似问题