Однією з причин, що на основі алгольських мов спонукають дужки на власній лінії, - це заохочення додавати більше рядків між розмежувальними дужками, не потребуючи переміщення дужок. Тобто, якщо хтось починає з
if (pred)
{
printf("yes");
}
легко зійти і додати ще одне твердження в дужки:
if (pred)
{
printf("yes");
++yes_votes;
}
Якби початкова форма була
if (pred)
{ printf("yes"); }
тоді нам довелося б "перенести" дві дужки, але мій приклад більше стосується останньої. Тут дужки розмежують те, що має бути послідовністю висловлювань , в основному викликається побічним ефектом.
І навпаки, у Ліспа бракує тверджень; кожна форма є вираженням , приносячи деяку цінність - навіть якщо в деяких рідкісних випадках (маючи на увазі загального Ліса), це значення навмисно вибирається таким, що не має значення без порожньої (values)
форми. Рідше можна знайти послідовності виразів , на відміну від вкладених виразів . Бажання "відкрити послідовність кроків до розмежувача, що закривається" виникає не так часто, тому що, коли заяви й відходять, а значення повернення стають більш звичною валютою, рідше ігнорувати повернене значення виразу, а отже, і більше рідко можна оцінити послідовність виразів лише для побічного ефекту.
У Common Lisp progn
форма є винятком (як і її побратими):
(progn
(exp-ignored-return-1)
(exp-ignored-return-2)
(exp-taken-return))
Тут проводиться progn
оцінка трьох виразів у порядку, але відкидає значення повернення перших двох. Ви можете собі уявити, як писати цю останню дужку в окремому рядку, але зауважте ще раз, що оскільки остання форма тут особлива (але не в загальному сенсі Lisp, щоб бути особливою ), з виразним поводженням, більш ймовірно, що ви додасте нові вирази в середині послідовності, а не просто "додавання ще одного до кінця", оскільки на абонентів тоді впливатимуть не просто будь-які нові побічні ефекти, а скоріше ймовірна зміна зворотного значення.
Здійснюючи грубе спрощення, дужки в більшості частин програми Lisp розмежують аргументи, передані функціям, як і в мовах, схожих на С, і не обмежують блоки операторів. З тих самих причин ми, як правило, утримуємо круглі дужки, що обмежують виклик функції в C, близько до аргументів, так само ми робимо те ж саме в Lisp, не маючи мотивації відхилятися від цього близького групування.
Закриття дужок набагато менше імпорту, ніж відступ форми, де вони відкриваються. З часом людина вчиться ігнорувати дужки та писати та читати за формою - так, як це роблять програмісти Python. Однак не дозволяйте, щоб ця аналогія наштовхнула вас на думку про те, що цілком видаляти круглі дужки було б доцільно. Ні, для цього найкраще зберегти дискусію comp.lang.lisp
.