Любопытство: что означает прогн?

21

Согласно документации Emacs:

progn is a special form in `C source code'.

(progn BODY...)

Eval BODY forms sequentially and return value of last one.
  1. Что prognозначает (или его происхождение)?
  2. Использование: Это эквивалентно Clojure«s ->макроса?
Ник
источник

Ответы:

32
  1. prognэто специальная форма, заимствованная из CL-подобных диалектов Lisp. В их реализациях он состоит из нескольких progs, вычисляемых выражений и числа, которое указывает, какое значение выражения возвращается. prog1Например, оценивает все выражения и возвращает значение первого, prog2оценивает все выражения и возвращает значение второго, prognоценивает все выражения и возвращает n-ное или, вернее, значение последнего выражения.

  2. prognв Emacs Lisp является эквивалентом Clojure, doкоторый используется как средство для объединения нескольких выражений в одно. Вам нужно будет использовать его, например, для ifусловного предложения Clojure .

wasamasa
источник
1
Хороший ответ, я проголосовал за это. Однако ради формальности: вам это не нужно для условных condвыражений, подразумевается progn.
mbork
2
Э - э, я говорил о Clojure , который не имеет неявный prognв своей if.
васамаса
2
Emacs также имеет prog1и prog2встроенные специальные формы.
CJM
1
Я видел, что это используется во многих пользовательских конфигурациях. Есть ли прирост производительности от «объединения» нескольких выражений таким способом, в отличие от оценки их одно за другим вне progn?
elethan
Не уверен, что заставляет тебя так думать. prognявляется эквивалентом фигурного блока в C-подобном языке ...
wasamasa