Apa yang membuatkan Lisp istimewa

Β«Bahasa pengaturcaraan terhebat yang pernah diciptaΒ«
β€” Alan Kay, "on Lisp"

Apa yang membuatkan Lisp istimewa

Apabila McCarthy membangunkan Lisp pada akhir 1950-an, ia sangat berbeza daripada bahasa sedia ada, yang paling penting ialah Fortran.

Lisp memperkenalkan sembilan idea baharu:

1. bersyarat. Pernyataan bersyarat ialah binaan jika-maka-lain. Sekarang kita ambil mudah. Mereka adalah dicipta McCarthy semasa pembangunan Lisp. (Fortran pada masa itu hanya mempunyai kenyataan goto, berganding rapat dengan arahan cawangan tentang perkakasan asas.) McCarthy, semasa berada dalam jawatankuasa Algol, menyumbangkan syarat kepada Algol, dari mana ia merebak ke bahasa lain.

2. Jenis fungsi. Dalam Lisp, fungsi ialah objek kelas pertama - ia adalah jenis data, sama seperti nombor, rentetan, dsb., dan mempunyai perwakilan literal, boleh disimpan dalam pembolehubah, boleh dihantar sebagai hujah, dsb.

3. Rekursi. Rekursi, sudah tentu, wujud sebagai konsep matematik sebelum Lisp, tetapi Lisp adalah bahasa pengaturcaraan pertama yang menyokongnya. (Ini mungkin tersirat dalam mencipta fungsi sebagai objek kelas pertama.)

4. Konsep baru pembolehubah. Dalam Lisp, semua pembolehubah adalah penunjuk yang berkesan. Nilai ialah jenis yang mempunyai, bukan pembolehubah, dan menetapkan atau mengikat pembolehubah bermakna menyalin penunjuk, bukan apa yang mereka tunjuk.

5. Kutipan sampah.

6. Program yang terdiri daripada ungkapan. Program Lisp ialah pokok ungkapan, setiap satunya mengembalikan nilai. (Sesetengah ungkapan Lisp boleh mengembalikan berbilang nilai.) Ini berbeza dengan Fortran dan banyak bahasa lain yang berjaya yang membezakan antara "ungkapan" dan "pernyataan."

Adalah wajar untuk mempunyai perbezaan ini dalam Fortran kerana bahasa itu berorientasikan baris (tidak menghairankan untuk bahasa yang format inputnya ialah kad tebuk). Anda tidak boleh mempunyai pernyataan bersarang. Dan selagi anda memerlukan ungkapan matematik untuk berfungsi, tidak ada gunanya mempunyai apa-apa lagi yang mengembalikan nilai kerana mungkin tiada apa-apa yang menunggu untuk dikembalikan.

Sekatan telah ditarik balik dengan kemunculan bahasa berstruktur blok, tetapi pada masa itu sudah terlambat. Perbezaan antara ungkapan dan pernyataan telah pun diwujudkan. Ia berpindah dari Fortran ke Algol dan seterusnya kepada keturunan mereka.

Apabila bahasa dibuat sepenuhnya daripada ungkapan, anda boleh mengarang ungkapan dengan cara yang anda mahukan. Anda boleh menulis sama ada (menggunakan sintaks Arc)

(if foo (= x 1) (= x 2))

atau

(= x (if foo 1 2))

7. Jenis simbol. Aksara adalah berbeza daripada rentetan, dalam hal ini anda boleh menyemak kesamaan dengan membandingkan penunjuk.

8. Notasi untuk kod menggunakan pokok simbol.

9. Seluruh bahasa sentiasa tersedia. Tidak ada perbezaan yang jelas antara masa baca, masa penyusunan dan masa larian. Anda boleh menyusun atau menjalankan kod semasa anda membaca, atau membaca atau menjalankan kod semasa anda menyusun, atau membaca atau menyusun kod semasa ia dijalankan.

Menjalankan kod semasa membaca membolehkan pengguna memprogram semula sintaks Lisp; kod berjalan pada masa penyusunan adalah asas untuk makro; kompilasi runtime adalah asas untuk menggunakan Lisp sebagai bahasa lanjutan dalam program seperti Emacs; dan akhirnya, pembacaan masa jalan membolehkan atur cara berkomunikasi menggunakan ungkapan-s, idea yang dicipta semula dalam XML baru-baru ini.

Kesimpulan

Apabila Lisp mula-mula dicipta, idea-idea ini jauh berbeza daripada amalan pengaturcaraan konvensional yang ditentukan oleh perkakasan yang tersedia pada akhir 1950-an.

Lama kelamaan, bahasa lalai, yang dijelmakan oleh kejayaan bahasa popular, secara beransur-ansur berkembang ke arah Lisp. Mata 1-5 kini diterima secara meluas. Titik 6 mula muncul dalam arus perdana. Dalam Python, terdapat klausa 7 dalam beberapa bentuk, walaupun tiada sintaks yang sesuai. Item 8, yang (dengan item 9) membolehkan makro dalam Lisp, masih hanya dalam Lisp, mungkin kerana (a) ia memerlukan tanda kurung atau sesuatu yang sama buruknya, dan (b) jika anda menambah peningkatan kuasa terkini ini, anda boleh tidak lagi mendakwa telah mencipta bahasa baru, tetapi hanya telah mengembangkan dialek baru Lisp; -)

Walaupun ini berguna untuk pengaturcara moden, adalah aneh untuk menggambarkan Lisp dari segi perbezaannya daripada teknik rawak yang diterima pakai dalam bahasa lain. Ini mungkin bukan apa yang McCarthy fikirkan. Lisp tidak direka untuk membetulkan kesilapan Fortran; ia kelihatan lebih sebagai hasil sampingan daripada mencuba pengiraan aksiomatisasi.

Sumber: www.habr.com

Tambah komen