Найти все слова, которые есть в первом предложении, и отсутствуют во втором - Lisp
Формулировка задачи:
Решение задачи: «Найти все слова, которые есть в первом предложении, и отсутствуют во втором»
(defun word-set-difference (a b) (mapcar #'string (set-difference (string-list a) (string-list b)))) (defun string-list (s) (read-from-string (concatenate 'string "(" (delete-if-not #'(lambda (x) (or (alpha-char-p x) (equal x #\space) (equal x #\-))) s) ")"))) > (word-set-difference "aa b-b cc" "cc dd") ("AA" "B-B")
Объяснение кода листинга программы
В данном коде реализована функция word-set-difference, которая принимает два аргумента типа string — a и b. Эта функция находит разность множеств слов в строке a и строке b (т.е. находит слова, которые есть в a, но нет в b).
Сначала функция string-list принимает строку s и возвращает список слов из этой строки. Она использует read-from-string для разбиения строки на слова, а затем удаляет лишние символы с помощью функции delete-if-not. В данном случае лишшими символами являются все символы, которые не являются буквами или пробелами.
Затем функция word-set-difference вызывает функцию string-list для обоих аргументов, а затем использует set-difference для нахождения разности множеств. Результатом работы функции word-set-difference является список слов, которые есть в первом аргументе, но нет во втором.
В приведенном примере функция word-set-difference вызывается с аргументами aa b-b cc
и cc dd
. Функция string-list преобразует эти строки в списки слов: [aa
, b-b
, cc
] и [cc
, dd
]. Затем set-difference находит разность множеств: [aa
, b-b
]. Результатом работы функции является список слов: [AA
, B-B
].
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д