Я изучаю лисп, и у меня возникла проблема, у меня есть этот код

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

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

Как мне получить список с символом в нем без написания

>(print (createlist '(#\a b 1))) 
0
zena 23 Окт 2018 в 19:43

2 ответа

Лучший ответ

Это единственный способ написать символьный литерал. Если вы хотите обнаружить a, а также #\a, вам необходимо проверить символ, имя которого состоит из одного символа, например

(let ((elt (car list)))
  (if (or (characterp elt)
          (and (symbolp elt) 
               (= (length (symbol-name elt)) 1)))
      (list elt)))
2
Barmar 23 Окт 2018 в 16:53
(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))
-1
Gwang-Jin Kim 24 Окт 2018 в 02:53
52954033