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
相关产品推荐
相关产品推荐

