首页 > 解决方案 > 如何生成固定大小的事实列表(包括重复项)?

问题描述

我是 ASP 和 Clingo 的新手,我需要为学校做一个项目。我想到了一些基本的音乐发生器。

现在,我需要生成音符(我现在坚持使用 C 大调)。我也想随机生成它们,但我不知道该怎么做。如何使以下代码生成随机的音符序列(也可以重复)?

note(c;d;e;f;g;a;b).

20 { play(X) : note(X)} 30.

#show play/1.

到目前为止,代码不允许超过 7 作为上限,因为它不会显示重复的注释。

电流输出play(b) play(g) play(e) play(c)

想要的输出play(d) play(g) play(f) ...[20-30 randomly generated notes]

我希望以后能够添加约束(比如这个注释不应该跟那个注释,等等)。我很感激任何提示,因为我对此知之甚少。

标签: answer-set-programmingclingo

解决方案


答案集是一个集合。原子没有顺序,不可能重复,因为它是一个集合。

您想为每个节拍猜测一个音符。

节拍(1..8)。

1 {播放(N,B):音符(N)} 1:-节拍(B)。


推荐阅读