Определить функцию, которая возвращает копию этой строки - Lisp
Формулировка задачи:
Решение задачи: «Определить функцию, которая возвращает копию этой строки»
(defun punctuation-marks (s p &aux (v '(#\. #\, #\: #\; #\! #\? #\-)) (n (position-if #'(lambda (a) (member a v)) s :from-end t)) (u (subseq s 0 n)) (z (subseq s n))) (concatenate 'string (substitute-if p #'(lambda (a) (member a v)) u) z)) > (punctuation-marks "abra: ca, dabra!" #\?) "abra? ca? dabra!" > (punctuation-marks "abra: ca, da! bra" #\?) "abra? ca? da! bra"
Объяснение кода листинга программы
В этом коде определена функция punctuation-marks
, которая принимает три аргумента: строку s
, в которой ищется пунктуация, символ p
, который указывает, какие знаки препинания нужно найти, и aux
, который не используется в этой функции.
Сначала создаются две переменные: v
, содержащая список знаков препинания, и n
, содержащая позицию первого найденного знака препинания в строке s
.
Затем создаются две другие переменные: u
, содержащая подстроку s
от начала до позиции n
, и z
, содержащую подстроку s
от позиции n
до конца.
Далее, с помощью функции concatenate
, создается новая строка, в которую вставляются все символы из u
, за которыми следует символ p
, а затем все символы из z
.
Наконец, новая строка возвращается в качестве результата.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д