Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在prolog中列表的奇数元素之后插入一个元素_Prolog - Fatal编程技术网

在prolog中列表的奇数元素之后插入一个元素

在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

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 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]
这是预期的答案。一个关系应该表现得像一个关系。你的程序不稳定。我回答了这个问题:“如何使代码使用奇数元素而不是偶数元素?”。如何使代码稳定是另一个问题。但是,这是一个重要的问题,因此我将其添加到解决方案中。