如何检查列表是否包含常用Lisp中的字符

时间:2018-10-23 16:43:04

标签: common-lisp

我正在学习Lisp,遇到问题,我有此代码

(defun createlist(list)
    (if (characterp (car lst))
        (list (car lst))))

> (print (createlist '(a v a (3))))

如何在不编写字符的情况下获得包含字符的列表

>(print (createlist '(#\a b 1))) 

2 个答案:

答案 0 :(得分:2)

这是编写字符文字的唯一方法。如果要同时检测a#\a,则需要检查名称长度为一个字符的符号,例如

(let ((elt (car list)))
  (if (or (characterp elt)
          (and (symbolp elt) 
               (= (length (symbol-name elt)) 1)))
      (list elt)))

答案 1 :(得分:-1)

(mapcar #'character (remove-if-not #'symbolp '(a b c 1 2)))
;; (#\A #\B #\C)

(mapcar #'list 
        (mapcar #'character 
                (remove-if-not #'symbolp
                               '(a b c 1 2 d))))
;; ((#\A) (#\B) (#\C) (#\D))