【发布时间】:2018-10-04 11:26:42
【问题描述】:
我对 Prolog 很陌生,我正在尝试构建一个脚本,我可以在其中使用 Prolog 生成随机字符串。到目前为止,我的运气并不好。
我这样做的想法是生成所需字符的列表,根据列表的大小创建一个随机数,然后尝试从该列表中提取一个字符。这很好用,但我还需要能够连接到一个变量,该变量显然一开始就没有。现在我只是试图将字符串的大小限制为 5 个字符,但将来我会想要一些更复杂的东西(例如 5 - 8 个字符之间)。
这是我目前所拥有的:
generate :-
Output = '',
generate_random_string(Output, 0),
write(Output).
generate_random_string(Output, 5) :-
Characters = ['A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g'],
random(0, 14, RandomValue),
nth0(RandomValue, Characters, RandomCharacter),
append(RandomCharacter, Output, Concat),
Output = Concat.
generate_random_string(Output, CharNum) :-
CharNum \= 5,
Characters = ['A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g'],
random(0, 14, RandomValue),
nth0(RandomValue, Characters, RandomCharacter),
append(RandomCharacter, Output, Concat),
Count is CharNum + 1,
Output = Concat,
generate_random_string(Output, Count).
我相信这会破坏 append 调用,但我不太确定为什么,尽管我知道它在第一次迭代时就被破坏了并且它给出了错误的结果。对此的任何帮助将不胜感激。
【问题讨论】:
-
查看
append/3的文档。append/3对列表进行操作。你可能想要atom_concat/3。