gpt4 book ai didi

list - 计算一个数字在列表中出现的次数

转载 作者:行者123 更新时间:2023-12-04 00:48:06 24 4
gpt4 key购买 nike

我正在用 prolog 编写一个程序,它计算列表中某个数字的出现次数

count([],X,0).
count([X|T],X,Y):- count(T,X,Z), Y is 1+Z.
count([_|T],X,Z):- count(T,X,Z).

这是输出
?- count([2,23,3,45,23,44,-20],X,Y).
X = 2,
Y = 1 ;
X = 23,
Y = 2 ;
X = 23,
Y = 1 ;
X = 3,
Y = 1 ;
X = 45,
Y = 1 ;
X = 23,
Y = 1 ;
X = 44,
Y = 1 ;
X = -20,
Y = 1 ;
false.

它多次计算相同的数字

任何帮助表示赞赏

最佳答案

而不是虚拟变量 _ 只需使用另一个变量 X1 并确保它不与 X 统一。

count([],X,0).
count([X|T],X,Y):- count(T,X,Z), Y is 1+Z.
count([X1|T],X,Z):- X1\=X,count(T,X,Z).

但是请注意,第二个参数 X 应该被实例化。所以例如count([2,23,3,45,23,44,-20],23,C) 将把 C 与 2 统一起来。如果你想要每个元素的计数,请使用
:- use_module(library(lists)).

count([],X,0).
count([X|T],X,Y):- count(T,X,Z), Y is 1+Z.
count([X1|T],X,Z):- X1\=X,count(T,X,Z).

countall(List,X,C) :-
sort(List,List1),
member(X,List1),
count(List,X,C).

然后你得到
 ?- countall([2,23,3,45,23,44,-20],X,Y).
X = -20,
Y = 1 ? ;
X = 2,
Y = 1 ? ;
X = 3,
Y = 1 ? ;
X = 23,
Y = 2 ? ;
X = 44,
Y = 1 ? ;
X = 45,
Y = 1 ? ;
no

关于list - 计算一个数字在列表中出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9088062/

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