На Lisp - Глава 3 |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translated in draft, editing and proof-reading required.
If you do not want to register an account, you can sign in with OpenID.
On Lisp - Chapter 3 | ||
Functional Programming | ||
The previous chapter explained how Lisp and Lisp programs are both built out of a single raw material: the function. Like any building material, its qualities influence both the kinds of things we build, and the way we build them. | В предыдущей главе рассказывалось о том, что Lisp и программы на нем созданы из единственного материала: функций. Как и любому строительному материалу, им присуще оказывать влияние как и на свойства того, что мы создаем, так и на способ создания. | |
This chapter describes the kind of construction methods which prevail in the Lisp world. The sophistication of these methods allows us to attempt more ambitious kinds of programs. The next chapter will describe one particularly important class of programs which become possible in Lisp: programs which evolve instead of being developed by the old plan-and-implement method. | Эта глава описывает методы разработки, преобладающие в мире Lisp. Изощренность этих методов позволит нам попытаться писать более сложные программы. В следующей главе будет рассмотрен особенно важный класс программ, который становится возможно реализовать в Лисп: программы, которые эволюционируют вместо того, чтобы разрабатываться старым способом <<спланируй и реализуй>>. | |
3.1 Functional Design | ||
The character of an object is influenced by the elements from which it is made. A wooden building looks different from a stone one, for example. Even when you are too far away to see wood or stone, you can tell from the overall shape of the building what it’s made of. The character of Lisp functions has a similar influence on the structure of Lisp programs. | На свойства объекта влияют элементы, из которых он создан. Например, деревянное здание на вид отличается от каменного. Даже находясь от него на далеком расстоянии и не имея возможности отличить на взгляд камень от дерева, вы сможете определить материал, из которого оно выстроено, исходя из общей формы этого здания. Особенности функций Lisp оказывают аналогичное влияние на структуру Lisp программ. | |
Functional programming means writing programs which work by returning values instead of by performing side-effects. Side-effects include destructive changes to objects (e.g. by rplaca) and assignments to variables (e.g. by setq). If side-effects are few and localized, programs become easier to read, test, and debug. Lisp programs have not always been written in this style, but over time Lisp and functional programming have gradually become inseparable. | Функциональное программирование означает написание программ, которые работают за счет возврата значений, а не за счет побочных действий. Побочные действия включают в себя деструктивные изменения объектов (напр. rplaca) и присвоения переменным (напр. setq). Если побочные действия немногочисленны и локализованы, то программы становится легче читать, тестировать и отлаживать. Lisp-программисты не всегда писали в таком стиле, но со временем Lisp и функциональное программирование постепенно стали неразделимы. | Comment was deleted — предложите перевод для side effects — zoid |
An example will show how functional programming differs from what you might do in another language. Suppose for some reason we want the elements of | Пример покажет, как функциональное программирование отличается от того, что можно делать при помощи другого языка. Допустим, нам нужно с какой-то целью | |
(defun bad-reverse (lst) | ||
(let* ((len (length lst)) | ||
(ilimit (truncate (/ len 2)))) | ||
(do ((i 0 (1+ i)) | ||
(j (1- len) (1- j))) | ||
((>= i ilimit)) | ||
(rotatef (nth i lst) (nth j lst))))) | ||
Figure 3.1: A function to reverse lists. | ||
a list in the reverse order. Instead of writing a function to reverse lists, we write a function which takes a list, and returns a list with the same elements in the reverse order. | изменить порядок элементов списка. Вместо написания функции, инвертирующей списки, мы напишем функцию, которая принимает список, а возвращает список с теми же элементами в обратном порядке. |

— Из-за того, что местный движок портит форматирование исходного кода, дальнейшая работа по переводу ведется здесь: http://rigidus.ru/onlisp/doku.php — zoid