(defun foo (in i out)
(if (>= i 0)
(progn
(append (list (intern (string (elt in i)))) out)
(print output)
(foo in (- i 1) out )
)
(out)
)
)
(print (foo "abcd" (- (length "abcd") 1) (list)))
我正在尝试将此字符串返回为 (a b c d)。但它确实返回 nil 作为输出。我在这里做错了什么?谢谢
我不知道这和追加有什么关系。我认为你想要的输出也很奇怪,你不应该做你正在做的事情。字符的正确对象是字符而不是符号。尽管如此,获取列表 (a b c d)
的好方法如下:
CL-USER> '(a b c d)
在运行时驻留符号很奇怪,所以你可能会喜欢这样:
(defconstant +alphabet+ #(a b c d e f g h i j k l m n o p q r s t u v w x y z))
(defun foo (seq)
(map 'list
(lambda (char)
(let ((index (- (char-code char) (char-code #\a))))
(if (< -1 index (length +alphabet+))
(svref +alphabet+ index)
(error "not in alphabet: ~c" char))))
seq))
我是一名优秀的程序员,十分优秀!