【发布时间】:2017-09-30 21:00:07
【问题描述】:
我正在做这个练习,为此我必须编写一个谓词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 来生成我的列表,但我也不知道如何将列表的长度限制为三个随机元素。
【问题讨论】:
-
内置插件有多少?
-
好吧,我想我可以使用
random和length以及基本的is等,但是因为这是一个练习,所以你不应该使用内置插件,除非它们是绝对有必要。如果你有内置的方法,我很乐意看到它! -
哦,
findall和bagof也可以!