Можете объяснить lambda в lisp?

Начинаю немного разбираться в Lisp (хочу одну штуку приделать в emacs). И не понимаю учебного примера:
...
(let* ( (...)
  (lines (...) ) 
   )
  (insert 
    (mapconcat '(lambda (s) (concat "<key>" s ) )
    lines ;; как передается переменная, которая ниже в параметр lambda?
    "\n"
  ) )

Собственно, вопрос в самом комментарии - я не понимаю по какому закону lines передался в параметр lambda?

Как это называется?
Всем спасибо.
  • Вопрос задан
  • 234 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Lisp
Седой и строгий
Функция mapconcat вызывает функцию переданную в первом аргументе (лямбду в вашем случае) для каждого элемента последовательности переданной вторым аргументом, а возвращённые значения склеивает в одну строку, разделяя третьим аргументом.
(mapconcat 
  '(lambda (s) (concat "<key>" s ))
  lines
  "\n")

То есть, если lines будет содержать '("a" "b" "c"), то сначала в лямбду будет передана строка "a", там склеена со строкой "<key>", потом строка "b", потом "c", а после полученные строки "<key>a", "<key>b" и "<key>c" будут склеены в одну строку "<key>a\n<key>b\n<key>c".
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы