我正在进行一项练习,需要编写一个谓词 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
等函数,但由于这是一道练习题,除非绝对必要,否则不应使用内置函数。如果你有内置函数的方法,我很乐意看到它! - N.W.findall
和bagof
也是可能的! - N.W.