小编msc*_*cky的帖子

列出不等式约束

我正在尝试编写一个Prolog(CLP)谓词,它将建立约束两个列表不等式的约束.

更正式地说,有两个列表A=[A1,...,AN], B=[B1,...,BN],约束被定义为(A1 #\= B1) #\/ (A2 #\= B2) #\/ ... #\/ (AN #\= BN).

我不确定如何在给定两个任意长度的列表的情况下构建此约束.这是我的尝试.我明白为什么它不起作用,但无法修复它.

any_different([], []).
any_different([H1|T1], [H2|T2]):-
    H1 #\= H2 #\/ any_different(T1, T2).
Run Code Online (Sandbox Code Playgroud)

prolog clpfd

11
推荐指数
1
解决办法
386
查看次数

两人游戏的数据库架构

让我们进行一场由两名球员(或球队)进行的比赛,其中结果由两名球员的得分表示(例如足球)。是否有一种惯用的方式将此类游戏的结果存储在关系数据库中?

我想出了两种可能的模式,但似乎都不够通用。

1. 每场比赛一排

将有一个games带有列的表格,game_id, winner, loser, winner_points, loser_points每个游戏将存储在表格的一行中。

  • 当需要遍历所有游戏时,这种表示非常有用。
  • 计算球员的统计数据很困难(例如计算球员的平均分数)

2. 每场比赛两排

将有一个games带有列的表game_id, player, opponent, player_points, opponent_points。每个游戏将存储在表的两行中,并且它们将具有相同的game_id.

  • 遍历所有游戏并非微不足道,但仍然很容易
  • 计算球员的平均分很简单 SELECT AVG(player_points) FROM games WHERE player = some_player
  • 不幸的是,表中的数据现在是多余的

sql database-schema

2
推荐指数
1
解决办法
2840
查看次数

标签 统计

clpfd ×1

database-schema ×1

prolog ×1

sql ×1