Проверить аргумент функции, является ли он символом - Lisp
Формулировка задачи:
Как можно проверить, что аргумент функции является символом?
Я сначала делал просто проверку на то, что аргумент не является числом:
(if (not (numberp x)))
А потом обнаружил, что в функцию можно передать еще и список в качестве аргумента. Что же делать со списком? Как можно узнать, что аргумент - это список?
Похоже, я нашел решение. Нужно использовать предикат atom.
При работе с выражениями необходимо иметь возможность проверить, является ли выражение атомом или списком. Это может потребоваться, например, перед применением функции first и rest, так как эти функции определены лишь для аргументов, являющихся списками. Базовый предикат atom используется для идентификации лисповских объектов, являющихся атомами.
Атом - это символ или число.
Решение задачи: «Проверить аргумент функции, является ли он символом»
textual
Листинг программы
> (listp '(a b c)) T > (listp 'a) NIL
Объяснение кода листинга программы
- Функция
listp
проверяет, является ли объект списком. - В первом вызове функции
listp
передается список(a b c)
. - Функция
listp
возвращаетT
, потому что объект является списком. - Во втором вызове функции
listp
передается символa
. - Функция
listp
возвращаетNIL
, потому что объект не является списком.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д