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

use*_*999 2 string list common-lisp

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

这是我的代码:

(setq chars
  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
(print (nth (random (length chars)) chars))
Run Code Online (Sandbox Code Playgroud)

但是使用CLISP我就得到了

*** - NTH: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" is not a list
Run Code Online (Sandbox Code Playgroud)

我认为Lisp中的每个字符串都是一个列表?如何将字符串"转换"到列表中?

Rai*_*wig 8

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

这是字符串字典.CHAR是字符串的访问者.

CL-USER 7 > (char "abc" 1)
#\b
Run Code Online (Sandbox Code Playgroud)

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

CL-USER 8 > (elt "abc" 1)
#\b
Run Code Online (Sandbox Code Playgroud)