Лиспийг юугаараа онцгой болгосон бэ?

«Хэзээ нэгэн цагт бүтээгдсэн хамгийн агуу програмчлалын хэл«
- Алан Кей, "on Lisp"

Лиспийг юугаараа онцгой болгосон бэ?

1950-иад оны сүүлээр Маккарти Лисп хэлийг хөгжүүлэхдээ одоо байгаа хэлнүүдээс эрс ялгаатай байсан бөгөөд хамгийн чухал нь Фортран.

Лисп есөн шинэ санааг танилцуулав:

1. Нөхцөл байдал. Нөхцөл илэрхийллүүд нь if-then-else бүтэц юм. Одоо бид тэднийг ердийн зүйл гэж үздэг. Тэд байсан зохион бүтээсэн Лиспийг хөгжүүлэх үеэр МакКарти. (Тэр үед Фортранд зөвхөн goto мэдэгдлүүд байсан бөгөөд үндсэн техник хангамжийн талаархи салбар заавартай нягт уялдаатай байсан.) Маккарти Алголын хороонд ажиллаж байхдаа Алголд болзолт үг оруулсан бөгөөд тэндээсээ бусад хэл рүү тархсан.

2. Функцийн төрөл. Lisp-д функцууд нь нэгдүгээр зэрэглэлийн объектууд юм - тэдгээр нь тоо, мөр гэх мэт өгөгдлийн төрөл бөгөөд шууд утгаар илэрхийлэгддэг, хувьсагчдад хадгалагдах, аргумент болгон дамжуулах гэх мэт.

3. Рекурс. Мэдээжийн хэрэг рекурс нь Lisp-ээс өмнө математик ойлголт байсан боловч Lisp үүнийг дэмжсэн анхны програмчлалын хэл байв. (Энэ нь нэгдүгээр зэрэглэлийн объект болгон функцийг бий болгох гэсэн утгатай байж магадгүй юм.)

4. Хувьсагчийн тухай шинэ ойлголт. Lisp-д бүх хувьсагч нь үр дүнтэй заагч юм. Утга гэдэг нь хувьсагч биш харин төрөл зүйл бөгөөд хувьсагчийг оноож, холбох нь заагчийг зааж байгаа зүйл биш харин хуулах гэсэн үг юм.

5. Хог цуглуулах.

6. Илэрхийлэлээс бүрдсэн программууд. Lisp програмууд нь илэрхийллийн мод бөгөөд тус бүр нь утгыг буцаадаг. (Зарим Lisp хэллэг нь олон утгыг буцааж болно.) Энэ нь "илэрхийлэл" болон "мэдэгдлийг" хооронд нь ялгадаг Фортран болон бусад олон амжилттай хэлнүүдээс ялгаатай.

Фортранд ийм ялгаа байх нь зүйн хэрэг байсан, учир нь хэл нь шугаман (оролтын формат нь цоолбортой байсан хэлний хувьд гайхмаар зүйл биш). Та мэдэгдэл оруулах боломжгүй. Мөн ажиллахын тулд математикийн илэрхийлэл хэрэгтэй л бол буцаахыг хүлээж буй зүйл байхгүй байж болох тул өөр ямар нэгэн утга буцаах нь утгагүй юм.

Блок бүтэцтэй хэлүүд гарч ирснээр хязгаарлалтыг цуцалсан боловч тэр үед хэтэрхий оройтсон байв. Илэрхийлэл, мэдэгдлийн хоорондох ялгаа аль хэдийн тогтоогдсон. Энэ нь Фортранаас Алгол руу, цаашлаад тэдний үр удамд дамжсан.

Хэл нь бүхэлдээ илэрхийллээс бүтсэн бол та хүссэнээрээ илэрхийлэл зохиож болно. Та аль нэгийг нь бичиж болно (синтакс ашиглан Нуман)

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

болон

(= x (if foo 1 2))

7. Тэмдгийн төрөл. Тэмдэгтүүд нь мөрүүдээс ялгаатай бөгөөд энэ тохиолдолд та заагчийг харьцуулж тэгш байдлыг шалгаж болно.

8. Кодын тэмдэглэгээ тэмдэгт мод ашиглах.

9. Бүх хэл нь үргэлж бэлэн байдаг. Унших хугацаа, эмхэтгэх хугацаа, ажиллах хугацаа хоёрын хооронд тодорхой ялгаа байхгүй. Та уншиж байхдаа кодыг эмхэтгэх эсвэл ажиллуулах, хөрвүүлэх явцад код уншиж эсвэл ажиллуулах, эсвэл ажиллаж байх үедээ уншиж эсвэл хөрвүүлэх боломжтой.

Унших явцад код ажиллуулах нь хэрэглэгчдэд Lisp-ийн синтаксийг дахин програмчлах боломжийг олгодог; хөрвүүлэх үед ажиллах код нь макроны үндэс болдог; ажиллах цагийн эмхэтгэл нь Lisp-ийг Emacs гэх мэт програмуудад өргөтгөлийн хэл болгон ашиглах үндэс болдог; Эцэст нь, ажиллах цагийн унших нь программуудад s-илэрхийлэл ашиглан харилцах боломжийг олгодог бөгөөд энэ санаа нь саяхан XML-д дахин шинээр бий болсон.

дүгнэлт

Lisp-ийг анх зохион бүтээхэд эдгээр санаанууд нь 1950-иад оны сүүлчээр хэрэглэгдэж байсан техник хангамжид заасан ердийн програмчлалын практикээс хол зөрүүтэй байсан.

Цаг хугацаа өнгөрөхөд алдартай хэлүүдийн амжилтаар биелсэн анхдагч хэл нь аажмаар Лисп рүү шилжсэн. Одоо 1-5-р цэгүүдийг өргөнөөр хүлээн зөвшөөрч байна. 6-р цэг нь үндсэн чиглэлд гарч эхэлж байна. Python-д тохирох синтакс байхгүй ч зарим хэлбэрээр 7-р зүйл байдаг. Lisp дээр макро хийх боломжтой болгодог 8-р зүйл (9-р зүйлтэй) нь зөвхөн Lisp-д хэвээр байгаа бөгөөд энэ нь (a) эдгээр хаалт эсвэл үүнтэй адил муу зүйл шаарддаг, мөн (б) хэрэв та хамгийн сүүлийн үеийн хүчийг нэмбэл шинэ хэл зохион бүтээсэн гэж хэлэхээ больсон, харин зөвхөн Лиспийн шинэ аялгууг хөгжүүлсэн; -)

Хэдийгээр энэ нь орчин үеийн программистуудад хэрэг болох ч бусад хэл дээр хэрэглэгдэж буй санамсаргүй техникээс Lisp-ийг ялгаатай талаас нь тайлбарлах нь хачирхалтай юм. Энэ нь Маккартигийн бодож байсан зүйл биш байж магадгүй юм. Лисп нь Фортраны алдааг засахад зориулагдаагүй; Энэ нь оролдлогын үр дүн гэж илүү харагдсан тооцоог аксиоматжуулах.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх