" Bahasa pemrograman terhebat yang pernah dibuat "
- Alan Kay, "on Lisp"

Ketika McCarthy mengembangkan Lisp pada akhir 1950-an, secara radikal berbeda dari bahasa yang ada, yang paling penting adalah
Fortran .
Lisp telah mengimplementasikan sembilan ide baru:
1.
Persyaratan . Pernyataan bersyarat adalah konstruk if-then-else. Sekarang kita anggap remeh. Mereka
ditemukan oleh McCarthy selama pengembangan Lisp. (Fortran pada saat itu hanya memiliki pernyataan yang berhubungan erat dengan instruksi cabang pada perangkat keras yang mendasarinya.) McCarthy, sementara di komite Algol, membuat pernyataan bersyarat di Algol, dari mana mereka menyebar ke bahasa lain.
2.
Tipe fungsi (tipe fungsi) . Dalam Lisp, fungsi adalah objek dari kelas pertama - mereka adalah tipe data, seperti angka, string, dll., Dan memiliki representasi literal, dapat disimpan dalam variabel, dapat dikirimkan sebagai argumen, dll.
3.
Rekursi . Rekursi, tentu saja, ada sebagai konsep matematika sebelum Lisp, tetapi Lisp adalah bahasa pemrograman pertama yang mendukungnya. (Ini mungkin tersirat dalam menciptakan fungsi sebagai objek kelas satu.)
4.
Konsep variabel baru . Dalam Lisp, semua variabel adalah pointer efisien. Nilai adalah tipe apa yang dimiliki, bukan variabel, dan variabel penugasan atau pengikat berarti menyalin pointer, bukan apa yang mereka tunjuk.
5.
Pengumpulan sampah .
6.
Program terdiri dari ekspresi (Program terdiri dari ekspresi) . Program Lisp adalah pohon ekspresi, yang masing-masing mengembalikan nilai. (Beberapa ekspresi Lisp dapat mengembalikan beberapa nilai.) Ini kontras dengan Fortran dan banyak bahasa sukses lainnya yang membedakan antara "ekspresi" dan "pernyataan".
Itu wajar untuk memiliki perbedaan dalam Fortran karena bahasa berorientasi linear (tidak mengherankan untuk bahasa di mana kartu punch adalah format input). Anda tidak dapat memiliki pernyataan bersarang. Dan sementara Anda membutuhkan ekspresi matematika untuk bekerja, tidak ada gunanya memaksa sesuatu yang lain untuk mengembalikan nilai, karena mungkin tidak ada sesuatu yang sedang menunggu untuk kembali.
Pembatasan dicabut dengan munculnya bahasa terstruktur-blok, tetapi pada saat itu sudah terlambat. Perbedaan antara ekspresi dan pernyataan sudah diperbaiki. Ia berpindah dari Fortran ke Algol dan selanjutnya ke keturunan mereka.
Saat bahasa dibuat seluruhnya dari ekspresi, Anda dapat membuat ekspresi sesuai keinginan. Anda dapat menulis (menggunakan sintaks
Arc )
(if foo (= x 1) (= x 2))
juga
(= x (if foo 1 2))
7.
Jenis simbol . Karakter berbeda dari string, dalam hal ini Anda dapat memeriksa kesetaraan dengan membandingkan pointer.
8.
Notasi untuk kode menggunakan pohon dari karakter.
9.
Seluruh bahasa selalu tersedia . Tidak ada perbedaan yang jelas antara waktu membaca, waktu kompilasi, dan waktu menjalankan. Anda dapat mengkompilasi atau menjalankan kode saat membaca, atau membaca atau menjalankan kode saat Anda mengkompilasi, atau membaca atau menyusun kode saat runtime.
Menjalankan kode sambil membaca memungkinkan pengguna untuk memprogram ulang sintaks Lisp; menjalankan kode pada waktu kompilasi adalah dasar untuk makro; kompilasi runtime adalah dasar untuk menggunakan Lisp sebagai bahasa ekstensi dalam program-program seperti Emacs; dan akhirnya, run-time reading memungkinkan program untuk berinteraksi menggunakan ekspresi-s, sebuah ide yang baru-baru ini diciptakan kembali dalam XML.
Kesimpulan
Ketika Lisp baru saja ditemukan, semua ide ini sangat jauh dari praktik pemrograman biasa yang ditentukan oleh perangkat keras yang tersedia pada akhir 1950-an.
Seiring waktu, bahasa default, yang diwujudkan dalam keberhasilan bahasa populer, secara bertahap berkembang menuju Lisp. Poin 1-5 sekarang tersebar luas. Poin 6 mulai muncul di arus utama. Dalam Python, dalam beberapa bentuk, ada item 7, meskipun tidak ada sintaks yang cocok. Klausa 8, yang (dengan klausa 9) memungkinkan makro dalam Lisp, masih hanya di Lisp, mungkin karena (a) ia membutuhkan kurung atau sesuatu yang sama buruknya, dan (b) jika jika Anda menambahkan peningkatan kekuatan terakhir ini, Anda tidak dapat lagi mengklaim telah menemukan bahasa baru, tetapi hanya mengembangkan dialek baru Lisp -)
Meskipun ini berguna untuk programmer modern, aneh untuk menggambarkan Lisp dalam hal perbedaannya dengan trik acak yang digunakan dalam bahasa lain. Mungkin ini bukan yang dipikirkan McCarthy. Lisp tidak dirancang untuk memperbaiki kesalahan Fortran; itu muncul lebih sebagai produk sampingan dari upaya untuk
aksioma komputasi .