我正在做这个练习,为此我必须编写一个谓词randomnames/1
用于生成三个名称的随机列表(不允许重复)。我有一个在它10名的数据库,已经和他们都对应一个数字,例如:name(1, Mary).
我写了一个谓语生成一个随机名称:序言 - 如何生成特定长度的列表?
randomname(Name) :-
random(0, 11, N), % generate random integer between 1 and 10.
name(N, Name).
我的问题是:我如何得到这个在列表中?还有一个正好三个元素的列表? 我不想使用太多的内建插件。 length/2
会好起来的。我想我可能需要它:)
非常感谢!
编辑:我想我会首先尝试生成一个三个随机数列表(名称可以晚点)。我写了这个可怕的错误的小东西:
numberlist([N|T]) :-
random(0, 11, N),
length([N|T], 3),
numberlist(T).
我知道如何用/ 2谓词做到这一点;当用户只需在查询中输入他们想要的具有三个元素的列表(例如numberlist(3,X).
)时。但我似乎无法弄清楚如何在代码中写下我总是想要三个数字的列表。 我也想用findall
来生成我的列表,但我不知道如何将列表的长度限制为三个随机元素。
有多少内置插件? – lurker
嗯,我想我可以使用'random'和'length'以及基本的'is'等,但是因为这是一个练习,除非他们是绝对必要的,否则您不应该使用内置函数。如果你有内置的方式,我很乐意看到它! –
哦,'findall'和'bagof'也是可能的! –