Tò mò: Progn là viết tắt của từ gì?


21

Theo tài liệu của Emacs:

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

(progn BODY...)

Eval BODY forms sequentially and return value of last one.
  1. Những gì không prognđại diện cho (hoặc nguồn gốc của nó)?
  2. Năng bảo mật bằng: Liệu nó tương đương với Clojure's ->vĩ mô?

Câu trả lời:


31
  1. prognlà một hình thức đặc biệt mượn từ phương ngữ Lisp giống CL. Trong các triển khai của chúng, nó được tạo từ nhiều progs, các biểu thức được ước tính và một số chỉ định giá trị biểu thức nào được trả về. prog1ví dụ đánh giá tất cả các biểu thức và trả về giá trị của prog2biểu thức thứ nhất, đánh giá tất cả các biểu thức và trả về giá trị của prognbiểu thức thứ hai, đánh giá tất cả các biểu thức và trả về giá trị thứ n , hay đúng hơn là giá trị của biểu thức cuối cùng.

  2. progntrong Emacs Lisp tương đương với Clojure do, được sử dụng như một phương tiện để bó nhiều biểu thức thành một biểu thức. Bạn sẽ cần sử dụng nó cho ifđiều kiện của Clojure chẳng hạn.


1
Câu trả lời tốt, tôi ủng hộ nó. Tuy nhiên, vì lợi ích của hình thức: bạn không thực sự cần nó cho các điều kiện, condcó một ẩn ý progn.
mbork

2
Uh, tôi đã nói về Clojure mà không có ẩn ý progntrong đó if.
wasamasa

2
Emacs cũng có prog1prog2như các hình thức đặc biệt tích hợp.
cjm

1
Tôi đã thấy điều này được sử dụng trong rất nhiều cấu hình của người dùng. Có sự tăng hiệu suất từ ​​"bó" nhiều biểu thức theo cách này trái ngược với việc đánh giá chúng lần lượt bên ngoài prognkhông?
elethan

Không chắc chắn những gì làm cho bạn nghĩ rằng. progntương đương với một khối giằng trong ngôn ngữ giống như C ...
wasamasa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.