Почему многие списки имеют имена функций, такие как "foo", "foo-1", "foo-2" и т. Д.? - PullRequest
2 голосов
/ 06 октября 2011

Я заметил довольно много примеров в различных Лиспах (по крайней мере, в Common Lisp и Emacs Lisp), где две или более функций имели одинаковые имена, за исключением конечного числа.Например, Emacs Lisp имеет eval-last-sexp и eval-last-sexp-1.Он также имеет print и prin1.Кажется, это обычная практика, но одна из первых вещей, которые вы узнаете о программировании, - это дать функциям уникальные и описательные имена.Откуда берется эта практика?

1 Ответ

2 голосов
/ 06 октября 2011

В большинстве случаев этот 1 имеет семантическое значение (обычно «одиночный»):

  • есть macroexpand, который пытается развернуть все макросы в форме, и macroexpand-1, который расширяет только макрос верхнего уровня
  • есть общая (не стандартизированная) утилита last1, которая возвращает последний элемент списка (так как last возвращает последнюю ячейку cons)
  • случай для prin1 более сложный, но также не просто случайное добавление 1: есть print, princ и prin1 (а также pprint). См. Hyperspec для получения более подробной информации.
...