我正在学习Common Lisp并将一个简单的密码生成器编写为一个介绍项目。
这是我的代码:
(setq chars
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
(print (nth (random (length chars)) chars))
但是使用CLISP我得到了
*** - NTH: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" is not a list
我认为Lisp中的每个字符串都是一个列表?我怎样才能"演员"字符串到列表?
答案 0 :(得分:8)
NTH仅适用于列表。字符串不是列表,而是字符的矢量。
这是dictionary for strings。 CHAR
是字符串的访问者。
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)
的列表。