如何在序言中递归地更改列表内的元组?
我有一个以下格式的列表:
[(index, count, color),(index+1,newcount,othercolor),...]
我想要一个带有给定索引的有序列表,更改具有该索引的元组的计数值。
到目前为止我所做的是:
play(Index,[(Index,Count,Color)|T], [(Index,NewCount,Color)|T]):-
NewCount is Count + 1.
play(Index,[Tuple|T],[Tuple|T]):-
play(Index,T,T).
它只是没有给我......
任何建议?
感谢您的任何答复!
I have a list in the following format:
[(index, count, color),(index+1,newcount,othercolor),...]
And I want, having an ordered list with an index given, change the count value of the tuple with that index.
What I've done so far is:
play(Index,[(Index,Count,Color)|T], [(Index,NewCount,Color)|T]):-
NewCount is Count + 1.
play(Index,[Tuple|T],[Tuple|T]):-
play(Index,T,T).
It just gives me no...
Any suggestions?
Thanx for any answer!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于您想创建一个不同的列表,因此您不能说谓词的第二个子句将相同。相反,您应该为新尾部使用新变量。像这样的东西:
since you want to create a different list, you cannot say at the second clause of the predicate will be the same. Instead, you should use a new variable for the new tail. Something like:
因为您知道它已排序,所以如果索引不在列表中,您可能会提前失败。
考虑到上述效率低下的情况,您可能会对使用标准内置函数进行列表操作的可能解决方案感兴趣。
Because you know it's sorted, you can fail early in case Index is not in the list.
Allowing the inefficiency above, you could be interested in a possible solution that uses standard builtins for list manipulation.