prolog:用第一个替换列表中的第n个项目
我想拥有一个可以用第一个替换列表中的第n个项目的序言。
示例:
% replace(+List,+Counter,-New List, %-First Item).
?- replace([1,2,3,4,5],3,L,Z).
L = [1, 2, 1, 4, 5]
Z = 1
我不知道该怎么做。感谢您的帮助!
I'd like to have a Prolog predicate that can replace the nth item in the list with the first.
Example:
% replace(+List,+Counter,-New List, %-First Item).
?- replace([1,2,3,4,5],3,L,Z).
L = [1, 2, 1, 4, 5]
Z = 1
I don't know how to do this. Thanks for your help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
尝试使用谓词
nth1(索引,列表,项目,休息)
:将其放在一起:
示例:
Try using the predicate
nth1(Index, List, Item, Rest)
:Putting it all together:
Examples:
另一种方法,稍快(用简单的算术替换为succ/2有助于性能):
结果:swi-prolog:
绩效比较:
请注意参数顺序,按照 https://swi-prolog.discourse.group/t/split-list/4836/8
Another method, slightly faster (replacing succ/2 with simple arithmetic helped performance):
Result in swi-prolog:
Performance comparison:
Note the argument order, as per https://swi-prolog.discourse.group/t/split-list/4836/8
您可以使用
附加/3
。尼斯,简洁和宣言:You might use
append/3
. Nice, concise, and declarative: