我知道我的问题对您来说很傻。我无法使用这种语言,因为它与我所知道的语言有很大不同。我需要采用评分预测的最大值,但是我不知道该怎么做。每当我进行研究时,出现的都是列表,而评分不是列表。这是我的代码:
movie(name(thedarknight),director(christopher),
[starring(magijelnar,10000),starring(aroneikhart,30000)],
rating(9)).
movie(name(shazam),director(david),
[starring(markstrong,1000),starring(jackdaniel,3000)],
rating(7)).
&其他,我在做矩阵对吗?
答案 0 :(得分:1)
此谓词将从结构中获取电影的名称及其等级:
movierating(Name, Rating) :-
movie(name(Name), _, _, rating(Rating)).
如果要获得最大额定值,最直接,最不高效的方法就是说,我已获得额定X,并且没有额定值Y大于X。因此,X为最大。在代码中,如下所示:
highest_rating(Rating) :-
movie(_, _, _, rating(Rating)),
\+ (movie(_, _, _, rating(OtherRating)),
OtherRating > Rating).
可能您也想知道电影的名称,因此可以将其添加到初始查询中:
highest_rated(Movie, Rating) :-
movie(name(Movie), _, _, rating(Rating)),
\+ (movie(_, _, _, rating(OtherRating)),
OtherRating > Rating).
这将是O(N ^ 2),对于您的喜好来说可能效率太低,在这种情况下,您应该使用findall/3
来获取所有评分,然后索取最大值。看起来像这样:
?- findall(Rating, movie(_, _, _, rating(Rating)), Ratings),
max_list(Ratings, Rating).
Rating = 9,
Ratings = [9, 7].
这对于库(聚合)也是可能的:
?- aggregate(max(Rating, Movie),
Movie^D^A^movie(name(Movie), D, A, rating(Rating)),
max(Rating, Movie)).
Rating = 9,
Movie = thedarknight.
答案 1 :(得分:1)
library(solution_sequences)最近已在SWI-Prolog中引入:
?- order_by([desc(X)],movie(name(N),_,_,rating(X))).
X = 9,
N = thedarknight ;
X = 7,
N = shazam.