Salah satu alasan bahasa berbasis Algol mendorong kawat gigi pada jalurnya sendiri adalah untuk mendorong penambahan lebih banyak garis di antara kawat gigi pembatas tanpa harus memindahkan kawat gigi. Yaitu, jika seseorang mulai dengan
if (pred)
{
printf("yes");
}
mudah untuk datang dan menambahkan pernyataan lain di dalam kurung:
if (pred)
{
printf("yes");
++yes_votes;
}
Apakah bentuk aslinya telah
if (pred)
{ printf("yes"); }
maka kita harus "memindahkan" dua kawat gigi, tetapi contoh saya lebih mementingkan yang kedua. Di sini, kawat gigi membatasi apa yang dimaksudkan sebagai urutan pernyataan , sebagian besar digunakan untuk efek samping.
Sebaliknya, Lisp tidak memiliki pernyataan; setiap bentuk adalah ekspresi , menghasilkan beberapa nilai — bahkan jika dalam beberapa kasus yang jarang (memikirkan Common Lisp), nilai itu sengaja dipilih sebagai "tanpa nilai" melalui (values)
bentuk kosong . Itu kurang umum untuk menemukan urutan ekspresi , sebagai lawan dari ekspresi bersarang . Keinginan untuk "membuka urutan langkah-langkah sampai pembatas penutup" tidak muncul sesering, karena ketika pernyataan pergi dan mengembalikan nilai menjadi mata uang yang lebih umum, lebih jarang mengabaikan nilai balik ekspresi, dan karenanya lebih jarang mengevaluasi serangkaian ekspresi untuk efek samping saja
Dalam Common Lisp, progn
formulir adalah pengecualian (seperti juga saudara kandungnya):
(progn
(exp-ignored-return-1)
(exp-ignored-return-2)
(exp-taken-return))
Di sini, progn
evaluasi tiga ekspresi secara berurutan, tetapi buang nilai pengembalian dari dua yang pertama. Anda dapat membayangkan menulis kurung penutup terakhir pada barisnya sendiri, tetapi perhatikan lagi bahwa karena bentuk terakhir spesial di sini (bukan dalam arti Lisp umum menjadi istimewa ), dengan perlakuan berbeda, kemungkinan besar seseorang akan menambahkan baru ekspresi di tengah urutan, bukan hanya "menambahkan satu lagi di akhir," karena penelepon kemudian akan terkena dampak tidak hanya oleh efek samping baru tetapi lebih karena perubahan kemungkinan nilai pengembalian.
Dengan menyederhanakan, tanda kurung di sebagian besar program Lisp membatasi argumen yang diteruskan ke fungsi — seperti dalam bahasa mirip C — dan tidak membatasi blok pernyataan. Untuk alasan yang sama kita cenderung menjaga tanda kurung membatasi panggilan fungsi dalam C tutup di sekitar argumen, jadi kita juga melakukan hal yang sama dalam Lisp, dengan sedikit motivasi untuk menyimpang dari pengelompokan yang dekat itu.
Penutupan tanda kurung jauh lebih sedikit impor daripada lekukan bentuk tempat mereka membuka. Pada waktunya, orang belajar untuk mengabaikan tanda kurung dan menulis dan membaca dengan bentuk — seperti yang dilakukan programmer Python. Namun, jangan biarkan analogi itu membuat Anda berpikir bahwa menghilangkan tanda kurung sepenuhnya akan bermanfaat. Tidak, itu perdebatan terbaik yang bisa diselamatkan comp.lang.lisp
.