【发布时间】:2020-11-24 18:40:27
【问题描述】:
假设我们有字母 {x,y},我想创建一个函数,它返回 true 或 false,输入列表是否包含 2x 符号 x。
例如two([x,x,y]). 返回true,而two([x,y,x]). 返回false。
这是我目前拥有的功能:
two([Xs]) :- two(Xs, 0).
two([y|Xs], S) :- two(Xs, S).
two([x|Xs], S) :- oneX(Xs, S).
two([], S) :- S=1.
oneX([x|Xs], S) :- S1 is 1, two(Xs, M1).
oneX([y|Xs], S) :- two(Xs, S).
我使用参数 S 来确定是否已经有 2x x(如果是,则参数为 1,否则为 0)。然而,这个函数不能按预期工作,并且总是返回false。你能看出我做错了什么吗?
【问题讨论】:
-
只有
x,还是two([y, y])也足够?