Что является реалистичным примером использования mapc? - PullRequest
0 голосов
/ 28 сентября 2018

Я просто думал о различных функциях отображения в common-lisp, как описано в гиперспек .Я в значительной степени привык к mapcar и думаю, что это легче всего понять.Но что является реальным примером использования mapc?Пример в hyperspec использует его для побочного эффекта, насколько я понимаю.Но почему он возвращает аргумент списка?

Существует ли общее правило, когда такое отображение выгодно по сравнению с итерацией, использующей loop и т. Д .?

1 Ответ

0 голосов
/ 28 сентября 2018

Что является реальным примером использования mapc?

(mapc #'print my-list) яснее, чем (dolist (x my-list) (print x))

Почему он возвращает аргумент списка?

Функциональное наследие предполагает, что каждая функция должна возвращать что-то полезное;для mapc это исходный список.

Я думаю mapc возвращает свой аргумент списка по той же причине printделает - чтобы упростить отладку, посыпая ваш код выводом.Например, предположим, что вы делаете что-то вроде

(mapcar #'important-processing
        list-with-weird-elements)

Вы хотите увидеть, что находится внутри списка, сохраняя логику:

(mapcar #'important-processing
        (mapc #'show-weird-object list-with-weird-elements))

Кроме того, многое в CL предназначено для "истерические причины" .

Существует ли общее правило, когда такое отображение выгодно по итерации с использованием loop и т. д.? 1032 * Только если у вас уже есть функция, котораяделает то, что вам нужно, как print выше.

...