You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Turbo Prolog音乐专辑专家系统添加概率计算展示功能

Turbo Prolog音乐专辑搜索专家系统:概率匹配展示实现需求

我有一个基于Turbo Prolog的音乐专辑搜索专家系统,可根据用户对音乐风格的回答匹配对应专辑。目前已修改系统,支持用户在不确定专辑是否包含特定风格时回答“maybe”,此时系统会返回多个专辑结果。现在需要实现对每个结果的概率统计并展示,要求按概率排序显示,例如:

  • THINK LATER - Tate McRae(60%)
  • Number 1 - Charli XCX(40%)

现有系统代码如下:

database
  yes(string)
  no(string)
  maybe(string)

predicates
  repeat
  run
  album(string)
  is(string)
  positive(string)
  negative(string)
  xpositive(string)
  xnegative(string)
  ask(string,char)
  remember(string,char)
  delete_all
clauses
  repeat.
  repeat:-repeat.

%-----------------------------------------------------------------------------
% albums
  album("Cold As Ice - Ava Max"):-is("EP"),is("Mixtape"),positive("Pop"),positive("R&B"),
                 positive("Electropop"),
                 negative("House"),negative("Hip-Hop"),negative("Trap-pop").

  album("AR - Addison Rae"):-is("EP"),is("Mixtape"), positive("Pop"),negative("R&B"),
                 positive("Electropop"),
                 negative("House"),negative("Hip-Hop"),positive("Trap-pop").

  album("After School - Melanie Martinez"):-is("EP"),positive("Pop"),negative("R&B"),
                 positive("Electropop"),
                 positive("House"),negative("Hip-Hop"),negative("Trap-pop").

  album("TYLA - Tyla"):-is("EP"), negative("Pop"),positive("R&B"),
                 negative("Electropop"),
                 positive("House"),negative("Hip-Hop"),negative("Trap-pop").

  album("Honor The Light - Zara Larson"):-is("EP"), positive("Pop"),negative("R&B"),
                 negative("Electropop"),
                 positive("House"),negative("Hip-Hop"),negative("Trap-pop").



  album("Barbie The Album"):-is("Standart"),is("Box_set"),positive("Pop"),negative("R&B"),
                 positive("Electropop"),
                 negative("House"),negative("Hip-Hop"),positive("Trap-pop").

  album("Eternal sunshine - Ariana Grande"):-is("Standart"),is("Box_set"), negative("Pop"),positive("R&B"),
                 negative("Electropop"),
                 positive("House"),negative("Hip-Hop"),negative("Trap-pop").

  album("Midnights - Taylor Swift"):-is("Standart"), is("Box_set"), positive("Pop"),positive("R&B"),
                 positive("Electropop"),
                 positive("House"),negative("Hip-Hop"),negative("Trap-pop").

  album("Beam me up Scotty - Nicki Minaj"):-is("Standart"),is("Mixtape"), negative("Pop"),negative("R&B"),
                 negative("Electropop"),
                 negative("House"),positive("Hip-Hop"),positive("Trap-pop").

  album("Number 1 - Charli XCX"):-is("Standart"),is("Mixtape"), positive("Pop"),negative("R&B"),
                 positive("Electropop"),
                 negative("House"),negative("Hip-Hop"),positive("Trap-pop").

  album("The Pinkprint - Nicki Minaj"):-is("Standart"), positive("Pop"),negative("R&B"),
                 negative("Electropop"),
                 positive("House"),positive("Hip-Hop"),negative("Trap-pop").

  album("Thank you next - Ariana Grande"):-is("Standart"), positive("Pop"),positive("R&B"),
                 negative("Electropop"),
                 positive("House"),positive("Hip-Hop"),negative("Trap-pop").

  album("THINK LATER - Tate McRae"):-is("Standart"), positive("Pop"),negative("R&B"),
                 positive("Electropop"),
                 negative("House"),negative("Hip-Hop"),positive("Trap-pop").

  album("Something To Give Each Other - Troye Sivan"):-is("Standart"), negative("Pop"),negative("R&B"),
                 positive("Electropop"),
                 negative("House"),negative("Hip-Hop"),positive("Trap-pop").

  album("Venus - Zara Larson"):- is("Standart"),negative("Pop"),positive("R&B"),
                 negative("Electropop"),
                 positive("House"),positive("Hip-Hop"),negative("Trap-pop").



  album("I don't know this album. I'm so sorry :c ").

%-----------------------------------------------------------------------------
  is("Mixtape"):-positive("mixed sounding").
  is("EP"):-negative("lasts 30 - 80 minutes").
  is("Standart"):-positive("lasts 30 - 80 minutes").
  is("Box_set"):-positive("3 or more parts in 1").
%-----------------------------------------------------------------------------
% работа с динамической базой данных
  positive(X):-xpositive(X),!; xnegative(X),!,fail; ask(X,'y').
  negative(X):-xnegative(X),!; xpositive(X),!,fail; ask(X,'n').
  ask(X,R):-write(X,"  ?  : "),readchar(Reply),write(Reply,"\n"),
        remember(X,Reply),R=Reply.
% проверка присутствия фатов в динамической базе данных
  xpositive(X):-yes(X);maybe(X).
  xnegative(X):-no(X);maybe(X).
% запоминаем факт в динамической базе данных
  remember(X,'y'):-asserta(yes(X)).
  remember(X,'n'):-assertz(no(X)).
  remember(X,'q'):-asserta(maybe(X)).
% очищаем память от фактов динамической базы данных
delete_all:-retract(yes(_)),delete_all.
delete_all:-retract(no(_)),delete_all.
delete_all:-retract(maybe(_)),delete_all.
delete_all.
%-----------------------------------------------------------------------------
  run:-delete_all,
       repeat,
       write("Answers (y - yes, n - no, q - don't know).\n"),
       album(X),
       write("This album is : ",X,"\n"),
       write("Do you want to exit? (y/n): "),readchar(Z),
       write(Z),nl,
       Z='y'.
goal
  makewindow(1,10,12," Expert system : Music albums ",0,0,25,80),
  write(" Music in your veins"),nl,
  write(" Sound of music from Prolog-Mashine for You."),nl,
  write("--------------------------------------------"),nl,
  run.

内容的提问来源于stack exchange,提问作者Seryozhka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:17:12