Найти слова, которые есть в первом предложении, но отсутствуют во втором - Lisp
Формулировка задачи:
Найти все слова, которые есть в первом предложении и отсутствуют во втором.
Решение задачи: «Найти слова, которые есть в первом предложении, но отсутствуют во втором»
textual
Листинг программы
(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, которая преобразует каждый элемент списка в строку. - Применяется функция
mapcarк списку слов первого предложения, преобразуя каждый элемент в строку. - Вычисляется разница между множеством слов первого предложения и второго предложения с помощью функции
set-difference. - Результатом является список слов, которые присутствуют в первом предложении, но отсутствуют во втором.
В функции
string-listпроисходит следующее: - Используется функция
read-from-string, чтобы прочитать строку из символа, следующего за последним символом в строке. - Формируется строка, содержащая все слова в предложении, разделенные пробелами.
- Используется функция
delete-if-not, чтобы удалить все символы, которые не являются буквами или пробелами. - Результатом является список слов.
Таким образом, код принимает два предложения в качестве входных данных и возвращает список слов, которые присутствуют только в первом предложении. В приведенном примере результатом является список слов
AAиB-B.