Числовые и символьные атомы - Lisp
Формулировка задачи:
Здравствуйте, помогите решить задачу по функциональному программированию.
Необходимо определить, что является числовыми, а что символьными атомами в S-выражениях:
1 марта 2015 в МХМ им. Чехова пройдет спектакль «2 сестры»
В магазине 7 континент с 1.03.2015 действует скидка 35%
Спасибо за внимание.
Решение задачи: «Числовые и символьные атомы»
textual
Листинг программы
(defun type-sym (lst)
(mapcar #'(lambda (x)
(list x '-
(cond ((numberp x) 'число)
((stringp x) 'строка)
(t 'symbol)))) lst))
==> type-sym
(type-sym '(1 марта 2015 в МХМ им. Чехова пройдет спектакль "2 сестры"))
==> ((1 - число) (марта - symbol) (2015 - число) (в - symbol) (МХМ - symbol) (им. - symbol) (Чехова - symbol) (пройдет - symbol) (спектакль - symbol) ("2 сестры" - строка))
(type-sym '(В магазине 7 континент с 1.03.2015 действует скидка 35%))
==> ((в - symbol) (магазине - symbol) (7 - число) (континент - symbol) (с - symbol) (1.03.2015 - symbol) (действует - symbol) (скидка - symbol) (35% - symbol))
Объяснение кода листинга программы
В данном коде определён функционал, который позволяет определить тип элемента списка.
Функция type-sym принимает входной список lst и возвращает список, в котором каждый элемент исходного списка помечен тегом, указывающим на его тип: число, строка или символ.
В данном случае, код выполняет следующие шаги:
- Определяет функцию
type-sym. - В функции
type-symиспользуется функцияmapcar, которая применяет анонимную функцию (лямбда-функцию) к каждому элементу входного спискаlst. - Анонимная функция проверяет тип элемента списка.
- Если элемент является числом, то возвращается список, в котором данный элемент помечен тегом 'число.
- Если элемент является строкой, то возвращается список, в котором данный элемент помечен тегом 'строка.
- Если элемент не является числом и не является строкой, то возвращается список, в котором данный элемент помечен тегом 'symbol.
- Возвращается результат применения
mapcarк входному спискуlst. Пример использования функцииtype-symсо следующим входным списком: '(1 марта 2015 в МХМ им. Чехова пройдет спектакль2 сестры)' показывает, что функция корректно определяет тип каждого элемента списка и возвращает список с правильными тегами. Пример использования функцииtype-symсо следующим входным списком: '(В магазине 7 континент с 1.03.2015 действует скидка 35%))' также показывает, что функция корректно определяет тип каждого элемента списка и возвращает список с правильными тегами.