Lisp. Работа с множествами - Lisp (229633)
Формулировка задачи:
Доброго времени суток!
Кто-нибудь встречался с подобной задачей на языке обработки списков (LISP)?
Условие: Дан текст из цифр, прописных и строчных букв латинского алфавита, за которым следует точка. Реализовать программу, определяющую, какие из них являются строчными.
Решение задачи: «Lisp. Работа с множествами»
textual
Листинг программы
(defun collect-downcase (s) (coerce (remove-if-not #'lower-case-p s) 'list)) > (collect-downcase "55stErLing 55stERLing.") (#\s #\t #\r #\i #\n #\g #\s #\t #\i #\n #\g)
Объяснение кода листинга программы
В данном коде определён пользовательский функтор collect-downcase, который принимает один аргумент s типа string. Внутри определения функтора:
- С помощью
coerceаргументуsприсваивается типlist. - С помощью
remove-if-notиз спискаsудаляются элементы, которые не удовлетворяют условию, заданному пользовательской функциейlower-case-p. - Возвращается результат выполнения
remove-if-not. Списокsсодержит символы из строки55stErLing 55stERLing.. Функцияlower-case-pвозвращаетnil, если символ является буквой в нижнем регистре, иtв противном случае. Символы, которые не являются буквами в нижнем регистре: #\s #\t #\r #\i #\n #\g. Поэтому после выполненияremove-if-notсписок будет содержать только эти символы. Но есть одна особенность в данном коде: вместо ожидаемого списка с 6 элементами возвращается список с 8 элементами. Вот результат вычисления: - Символ #\s.
- Символ #\t.
- Символ #\r.
- Символ #\i.
- Символ #\n.
- Символ #\g.
- Символ #\s.
- Символ #\t.
- Символ #\i.
- Символ #\n.
- Символ #\g.
- Временная переменная
s(не является элементом списка). - Временная переменная
s(не является элементом списка). - Временная переменная
s(не является элементом списка). - Временная переменная
s(не является элементом списка). - Временная переменная
s(не является элементом списка). - Временная переменная
s(не является элементом списка). - Временная переменная
s(не является элементом списка). - Временная переменная
s(не является элементом списка). - Временная переменная
s(не является элементом списка).