Naon ngajadikeun Lisp husus

«Basa programming greatest kungsi dijieun«
- Alan Kay, "on Lisp"

Naon ngajadikeun Lisp husus

Nalika McCarthy ngembangkeun Lisp dina ahir 1950-an, éta béda pisan sareng basa anu aya, anu paling penting nyaéta. Fortran.

Lisp ngenalkeun salapan ideu anyar:

1. Sarat-sarat. Pernyataan kondisional mangrupikeun konstruksi upami-lajeng-sejenna. Ayeuna urang nyandak aranjeunna for teu dibales. Aranjeunna nimukeun McCarthy salila ngembangkeun Lisp. (Fortran waktu éta ngan boga pernyataan goto, raket gandeng jeung instruksi cabang dina hardware kaayaan.) McCarthy, bari dina panitia Algol, nyumbang conditionals mun Algol, ti mana aranjeunna nyebarkeun ka basa séjén.

2. Hiji tipe fungsi. Dina Lisp, fungsi nyaéta obyék kelas munggaran - aranjeunna mangrupikeun jinis data, sapertos angka, senar, sareng sajabana, sareng gaduh perwakilan literal, tiasa disimpen dina variabel, tiasa disalurkeun salaku argumen, jsb.

3. Rekursi. Rekursi, tangtosna, aya salaku konsép matematika sateuacan Lisp, tapi Lisp mangrupikeun basa pamrograman anu munggaran ngadukung éta. (Ieu meureun tersirat dina nyieun fungsi salaku objék kelas munggaran.)

4. Konsep anyar variabel. Dina Lisp, sadaya variabel mangrupikeun petunjuk anu efektif. Nilai-nilai mangrupikeun jinis naon anu dipiboga, sanés variabel, sareng netepkeun atanapi ngariung variabel hartosna nyalin petunjuk, sanés naon anu ditunjukkeun.

5. Ngumpulkeun runtah.

6. Program diwangun ku éksprési. Program Lisp mangrupikeun tangkal ekspresi, anu masing-masing ngabalikeun nilai. (Sababaraha ekspresi Lisp tiasa ngabalikeun sababaraha nilai.) Ieu kontras sareng Fortran sareng seueur basa suksés sanés anu ngabédakeun antara "éksprési" sareng "pernyataan."

Wajar lamun aya bédana ieu dina Fortran sabab basa éta berorientasi garis (teu heran pikeun basa anu format inputna nyaéta kartu ditinju). Anjeun teu bisa boga pernyataan nested. Sareng salami anjeun peryogi éksprési matematika pikeun damel, teu aya gunana pikeun ngagaduhan anu sanés ngabalikeun nilai sabab moal aya anu ngantosan dipulangkeun.

Watesanna dicabut sareng munculna basa terstruktur blok, tapi ku waktos éta telat. Bédana antara éksprési sareng pernyataan parantos ditetepkeun. Ieu diliwatan ti Fortran ka Algol sarta salajengna ka turunan maranéhanana.

Lamun hiji basa dijieun sagemblengna tina éksprési, Anjeun bisa nyusun éksprési sagala cara nu Anjeun hoyongkeun. Anjeun tiasa nyerat boh (nganggo sintaksis Gandewa)

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

atawa

(= x (if foo 1 2))

7. Hiji tipe simbol. Karakter béda ti string, nu hal ieu anjeun bisa pariksa keur sarua ku ngabandingkeun pointers.

8. Notasi pikeun kode ngagunakeun tangkal simbol.

9. Sakabeh basa salawasna sadia. Henteu aya bédana anu jelas antara waktos maca, waktos kompilasi sareng waktos ngajalankeun. Anjeun tiasa compile atawa ngajalankeun kode bari maca, atawa maca atawa ngajalankeun kode bari anjeun compile, atawa maca atawa compile kode bari eta dijalankeun.

Ngajalankeun kode bari maca ngamungkinkeun pamaké pikeun reprogram sintaksis Lisp urang; kode ngajalankeun dina waktos compile mangrupa dadasar pikeun macros; kompilasi runtime mangrupikeun dasar pikeun ngagunakeun Lisp salaku basa extension dina program sapertos Emacs; sarta tungtungna, bacaan runtime ngamungkinkeun program pikeun komunikasi ngagunakeun s-ekspresi, hiji gagasan nembe reinvented di XML.

kacindekan

Nalika Lisp munggaran diciptakeun, ideu ieu jauh pisan tina prakték program konvensional anu didikte ku hardware anu aya dina ahir taun 1950-an.

Kana waktu, basa standar, embodied ku kasuksésan basa populér, laun mekar nuju Lisp. Poin 1-5 ayeuna ditarima sacara lega. Titik 6 mimiti muncul dina mainstream. Python gaduh klausa 7 dina sababaraha bentuk, sanaos teu aya sintaksis anu cocog. item 8, nu (kalawan item 9) ngajadikeun macros mungkin di Lisp, masih ngan di Lisp, meureun kusabab (a) merlukeun eta kurung atawa hal sarua goréng, jeung (b) mun anjeun tambahkeun kanaékan panganyarna dina kakuatan, Anjeun tiasa teu deui ngaku geus nimukeun basa anyar, tapi ngan geus ngembangkeun dialek anyar Lisp; -)

Sanajan ieu mangpaat pikeun programer modern, éta aneh mun ngajelaskeun Lisp dina watesan bédana ti téhnik acak diadopsi dina basa séjén. Ieu panginten sanés anu dipikirkeun ku McCarthy. Lisp teu dirancang pikeun ngabenerkeun kasalahan Fortran; eta mucunghul leuwih salaku ku-produk tina nyobian itungan axiomatize.

sumber: www.habr.com

Tambahkeun komentar