在Common Lisp中从字符串中选择随机字符

时间:2014-05-13 19:29:29

标签: string list common-lisp

我正在学习Common Lisp并将一个简单的密码生成器编写为一个介绍项目。

这是我的代码:

(setq chars
  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
(print (nth (random (length chars)) chars))

但是使用CLISP我得到了

*** - NTH: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" is not a list

我认为Lisp中的每个字符串都是一个列表?我怎样才能"演员"字符串到列表?

3 个答案:

答案 0 :(得分:8)

NTH仅适用于列表。字符串不是列表,而是字符的矢量。

这是dictionary for stringsCHAR是字符串的访问者。

CL-USER 7 > (char "abc" 1)
#\b

由于字符串也是序列,因此所有序列操作都适用。请参阅:Sequence dictionary

CL-USER 8 > (elt "abc" 1)
#\b

答案 1 :(得分:3)

Lisp是一个交互式系统。学习与REPL进行对话:

CL-USER> (type-of "abc") (SIMPLE-ARRAY CHARACTER (3))

您应该从CLISP获得类似的结果。

你能从这里拿走吗?

答案 2 :(得分:0)

字符串不是列表。并非所有内容都是Lisp中的列表;)

您可以使用coerce创建字符(coerce "some string" 'list)的列表。