У меня есть две строки одинаковой длины, которые отличаются ровно одним символом, и я хочу, чтобы строка всех символов была одинаковой.В общем, что-то вроде этого, которое вычисляется как строка, а не как список символов:
(loop for a across "abcd"
for b across "abce"
when (char= a b) collect a)
Хотя производительность здесь не проблема, я обнаружил, что вокруг нее стоит (coerce ... 'string)
.
Итак, я придумал что-то вроде
(loop with result = ""
for a across "abcd"
for b across "abce"
when (char= a b)
do (setf result (concatenate 'string result (string a)))
finally (return result))
, которое делает работу, но выглядит для меня не очень элегантно.
(map 'string (lambda (a b) (when (char= a b) a)) "abcd" "abce")
выглядит лучше, но не работает, потому что NIL
не является символом, когда a
и b
не равны.
Есть ли более элегантная идиома для повторениястроку и получить строку обратно?