Lisp `characterp` возвращает ноль каждый раз - PullRequest
0 голосов
/ 24 октября 2018

У меня есть программа, и я хотел бы проверить, какие элементы списка являются символами.Тем не менее, я никогда не смогу сделать предикат characterp равным T.

Вывод этого фрагмента кода: NIL

(print (characterp 'c))

Моя текущая теория заключается в том, что c не символ, а атом, который не является числом или символом.Если я использую неподходящий предикат, то этот предикат может помочь мне вернуть T, когда я передаю "символ", и NIL в противном случае?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Моя текущая теория заключается в том, что c не является символом

Вам не нужна теория.Lisp предназначен для интерактивного использования и может рассказать вам, что это такое.Просто спросите Лисп о типе:

CL-USER 11 > (type-of 'c)
SYMBOL

CL-USER 12 > (type-of "c")
SIMPLE-TEXT-STRING

CL-USER 13 > (type-of #\c)
CHARACTER
0 голосов
/ 24 октября 2018

Ваш c является символом с именем "c".Это имя представляет собой строку с одним символом.

Символьный литерал пишется как #\c в Common Lisp:

(characterp #\c)
⇒ T

Если вы хотите вместо этого задать вопрос «Этосимвол с именем длины 1? », нужно сказать так:

(= 1 (length (symbol-name 'c)))
⇒ T
...