You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prolog中listStar谓词实现列表元素后追加星号异常问题求助

解决Prolog listStar谓词的元素追加*问题

我来帮你搞定这个问题~你遇到的42是ASCII字符*的数值,这是因为错误使用is运算符导致的,下面详细解释并给出修正方案:

问题原因分析

你写的Z is ['*']里,is是Prolog的算术求值运算符,它会把右侧表达式当成算术运算处理。而字符*的ASCII码正好是42,所以Prolog就把42赋值给了Z,这就是结果里出现一串42而非目标字符*的原因。

修正后的代码

我们只需要直接将Z绑定为原子'*'(用单引号括起来避免被解析成运算符),完全不需要使用is:

listStar([], []).
listStar([X|Xs], [X, '*'|Zs]) :- listStar(Xs, Zs).

测试验证

运行你给出的查询:

?- listStar([1,2,3,4], R).

会得到预期结果:

R = [1, *, 2, *, 3, *, 4, *]

额外小提示

  • 在Prolog中,像*这类特殊符号作为原子使用时,建议用单引号包裹,防止被解析成运算符;
  • is运算符仅用于算术表达式求值(比如Sum is A + B),直接绑定原子或变量时不需要使用它。

内容的提问来源于stack exchange,提问作者Benarab Badi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:17:35