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


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 .


1
Хороший ответ, я проголосовал за это. Однако ради формальности: вам это не нужно для условных condвыражений, подразумевается progn.
mbork

2
Э - э, я говорил о Clojure , который не имеет неявный prognв своей if.
васамаса

2
Emacs также имеет prog1и prog2встроенные специальные формы.
CJM

1
Я видел, что это используется во многих пользовательских конфигурациях. Есть ли прирост производительности от «объединения» нескольких выражений таким способом, в отличие от оценки их одно за другим вне progn?
elethan

Не уверен, что заставляет тебя так думать. prognявляется эквивалентом фигурного блока в C-подобном языке ...
wasamasa
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.