首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Predicate在Prolog中,predicate仅适用于数字

Predicate在Prolog中,predicate仅适用于数字
EN

Stack Overflow用户
提问于 2021-09-04 23:58:39
回答 1查看 50关注 0票数 1

我在Prolog中编写谓词时遇到了问题:

在Prolog中,通过将每个元素替换为element * element形式的元素,定义一个谓词replace1(L1, L2),当列表L2从列表L1派生时,将满足该谓词。

示例:L1 = [1, aa, 3], L2 = [1 * 1, aa * aa, 3 * 3].

我尝试过这种方式,但这个谓词只对数字有效:

代码语言:javascript
复制
replace1 ([], []) :- !.
replace1 ([X | Xs], [Z | Zs]) :-
  Z is X * X,
  replace1 (Xs, Zs).
EN

回答 1

Stack Overflow用户

发布于 2021-09-05 06:49:20

您正在使用算术求值运算符is/2。你只需要使用=就可以得到你想要的东西。

代码语言:javascript
复制
replace([], []).
replace([X|Xs], [Y|Ys]) :-
    Y = X * X,
    replace(Xs, Ys).

这提供了:

代码语言:javascript
复制
| ?- replace([1, aa, 3], X).
X = [1*1,aa*aa,3*3]

你也可以只在头部内部使用模式匹配:

代码语言:javascript
复制
replace([], []).
replace([X|Xs], [X*X|Ys]) :-  replace(Xs, Ys).
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69059685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档