在prolog中列表的奇数元素之后插入一个元素
plz帮助我不能在prolog中的奇数元素后插入元素 此代码在偶数元素后插入1在prolog中列表的奇数元素之后插入一个元素,prolog,Prolog,plz帮助我不能在prolog中的奇数元素后插入元素 此代码在偶数元素后插入1 add([],[]). add([H|T],[H|[1|T1]]):- 0 is H mod 2, !, add(T,T1). add([H|T],[H|T1]):- add(T,T1). 在您的代码行中: 0 is H mod 2 正在检查偶数元素。通过将0更改为1,您可以将其更改为检查奇数元素: add([],[]). add([H|T],[H|[1|T1]]):- 1
add([],[]).
add([H|T],[H|[1|T1]]):-
0 is H mod 2,
!,
add(T,T1).
add([H|T],[H|T1]):-
add(T,T1).
在您的代码行中:
0 is H mod 2
正在检查偶数元素。通过将0更改为1,您可以将其更改为检查奇数元素:
add([],[]).
add([H|T],[H|[1|T1]]):-
1 is H mod 2,
!,
add(T,T1).
add([H|T],[H|T1]):-
add(T,T1).
现在它会像以前一样,但是在奇数元素后面加上1
如评论中所建议的,为了使其稳定,您需要额外的防护装置,这也意味着您可以移除切口
add([],[]).
add([H|T],[H|[1|T1]]):-
1 is H mod 2,
add(T,T1).
add([H|T],[H|T1]):-
0 is H mod 2,
add(T,T1).
我真的不明白问题出在哪里。如果您编写了上面的代码,然后让它在奇数元素之后插入一些内容,看起来几乎是一个微不足道的更改。
add([3],[3,1])。
和add([3],[3])。
成功了。确实如此,我也认为这很奇怪。但是Amine没有指出这是否是期望的行为,只是他们希望他们的代码在奇数元素而不是偶数元素上工作。但这是你的错误add([3],L)
只生成L=[3,1]
这是预期的答案。一个关系应该表现得像一个关系。你的程序不稳定。我回答了这个问题:“如何使代码使用奇数元素而不是偶数元素?”。如何使代码稳定是另一个问题。但是,这是一个重要的问题,因此我将其添加到解决方案中。