gpt4 book ai didi

Prolog如何制作新的数字列表

转载 作者:行者123 更新时间:2023-12-01 23:38:06 25 4
gpt4 key购买 nike

我有一个原始列表,格式为 [name+name+mark, name+name+mark]我想要做的是制作一个新列表,它只标记为它的元素,如 [mark1, mark2] (标记是数字!)。所以我做了一个代码

getAvg([], NEWLIST).
getAvg([_+_+Mark|Xs], R) :-
getAvg(Xs, T) ,
append(T, [Mark], R).

但唯一的事情 getAvg([susan+andy+43, susan+mike+43], A)返回是
R = [43, 43] ;
R = [_2918, 43, 43] ;
R = [_2918, _2930, 43, 43] ;
R = [_2918, _2930, _2942, 43, 43] ;
R = [_2918, _2930, _2942, _2954, 43, 43] ;
R = [_2918, _2930, _2942, _2954, _2966, 43, 43] ;
R = [_2918, _2930, _2942, _2954, _2966, _2978, 43, 43] ;
R = [_2918, _2930, _2942, _2954, _2966, _2978, _2990, 43, 43] ;
R = [_2918, _2930, _2942, _2954, _2966, _2978, _2990, _3002, 43|...] ;
R = [_2918, _2930, _2942, _2954, _2966, _2978, _2990, _3002, _3014|...] ;
R = [_2918, _2930, _2942, _2954, _2966, _2978, _2990, _3002, _3014|...] ;
R = [_2918, _2930, _2942, _2954, _2966, _2978, _2990, _3002, _3014|...] ;
R = [_2918, _2930, _2942, _2954, _2966, _2978, _2990, _3002, _3014|...] ;
R = [_2918, _2930, _2942, _2954, _2966, _2978, _2990, _3002, _3014|...] ;
R = [_2918, _2930, _2942, _2954, _2966, _2978, _2990, _3002, _3014|...]

我怎样才能让它只返回 R = [43,43] ?

最佳答案

错误在这里:

getAvg([], NEWLIST).

这应该是:
getAvg([], []).

因为对于空列表,您需要返回空列表。

虽然这里关于效率的另一件事是规则:
getAvg([_+_+Mark|Xs], R) :-
getAvg(Xs, T) ,
append(T, [Mark], R).

您拥有 Mark,然后继续处理列表的其余部分,最后使用 append 遍历所有列表以添加 Mark。更有效的方法是:
getAvg([_+_+Mark|Xs], [Mark,T]) :-getAvg(Xs, T).

在这里,您不需要遍历任何列表来添加 Mark,只需将其放在 head 中即可。即使这改变了最终列表的顺序,这样做仍然更有效,最后反转输出列表以获得与之前程序相同的行为。

关于Prolog如何制作新的数字列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49391739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com