ทำไมฉันจึงควรเรียนรู้ Lisp [ปิด]


125

ฉันรู้สึกว่าควรเรียนรู้Lispจริงๆและมีแหล่งข้อมูลดีๆมากมายที่จะช่วยฉันทำ

ฉันไม่ได้ท้อถอยด้วยไวยากรณ์ที่ซับซ้อน แต่ใน "การเขียนโปรแกรมเชิงพาณิชย์แบบเดิม" ฉันจะหาสถานที่ที่เหมาะสมที่จะใช้แทนภาษาขั้นตอน

มีแอพนักฆ่าเชิงพาณิชย์ที่เขียนด้วย Lisp หรือไม่?


5
ยากที่จะถูกเลื่อนออกจากสิ่งที่ไม่มี
— Kaz

อ่านประวัติส่วนตัวของฟิลิป Greenspun ของ เต็มไปด้วยงาน Lisp ที่แท้จริง
— ซ

1
นอกจากนี้ที่นี่ Greenspun ทำงานเกี่ยวกับการจำลองเครือข่ายแบบสวิตช์แพ็กเก็ตการออกแบบ DSP การออกแบบโปรเซสเซอร์เลย์เอาต์ VLSI ระบบอัตโนมัติทางวิศวกรรมเครื่องกลการเคลื่อนที่ของโลกโดยอัตโนมัติและเปิดและปิดทั้งหมดนี้ใช้ Lisp หรือเกี่ยวข้องกับ Lisp เขาช่วยออกแบบสถาปัตยกรรม PA-RISC ของ Hewlett Packard โดยใช้เครื่องมือที่พัฒนาบนเครื่อง Lisp
— ซ

นี่คือแอพบางตัวที่พัฒนาใน Lisp - Emacs, G2, AutoCad, Igor Engraver และ Yahoo Store
— Arulx Z

คำตอบ:


55

การใช้ Lisp หลักอย่างหนึ่งคือในปัญญาประดิษฐ์ เพื่อนของฉันที่วิทยาลัยเรียนหลักสูตร AI ระดับบัณฑิตศึกษาและสำหรับโครงการหลักของเขาเขาเขียนโปรแกรมแก้ปัญหา" Lights Out " ใน Lisp โปรแกรมหลายเวอร์ชันของเขาใช้รูทีน AI ที่แตกต่างกันเล็กน้อยและการทดสอบบนคอมพิวเตอร์ 40 เครื่องก็ให้ผลลัพธ์ที่ค่อนข้างเรียบร้อย (ฉันหวังว่ามันจะออนไลน์ที่ไหนสักแห่งสำหรับฉันที่จะเชื่อมโยง แต่ฉันไม่คิดว่ามันเป็น)

สองภาคการศึกษาที่ผ่านมาฉันใช้ Scheme (ภาษาที่มีพื้นฐานจาก Lisp) เพื่อเขียนโปรแกรมแบบโต้ตอบที่จำลองกิจวัตร "Who's on First" ของ Abbott และ Costello ข้อมูลที่ป้อนจากผู้ใช้จับคู่กับโครงสร้างข้อมูลที่ค่อนข้างซับซ้อน (คล้ายกับแผนที่ในภาษาอื่น ๆ แต่ยืดหยุ่นกว่ามาก) เพื่อเลือกสิ่งที่จะตอบสนองที่เหมาะสม ฉันยังเขียนกิจวัตรในการไขปริศนาสไลด์ 3x3 (อัลกอริทึมที่สามารถขยายไปยังปริศนาสไลด์ขนาดใหญ่ได้อย่างง่ายดาย)

โดยสรุปการเรียนรู้ Lisp (หรือ Scheme) อาจไม่ได้นำไปใช้งานจริงมากมายนอกเหนือจาก AI แต่เป็นประสบการณ์การเรียนรู้ที่มีคุณค่าอย่างยิ่งอย่างที่คนอื่น ๆ กล่าวไว้ การเขียนโปรแกรมด้วยภาษาที่ใช้งานได้เช่น Lisp จะช่วยให้คุณคิดวนซ้ำได้ด้วย (หากคุณมีปัญหากับการเรียกซ้ำในภาษาอื่นนี่อาจช่วยได้มาก)


5
ทำไมคุณถึงบอกว่า Lisp นั้นดีสำหรับ AI เท่านั้น? นอกจากนี้ยังเป็นภาษาที่มีหลายกระบวนทัศน์ ฟังก์ชั่นเป็นเพียงหนึ่งในกระบวนทัศน์ต่างๆที่เปิดใช้งาน
— Luís Oliveira

6
ฉันไม่ได้บอกว่ามันใช้สำหรับ AI เท่านั้นฉันบอกว่าหนึ่งในการใช้งานหลักคือ AI คุณอ่านหรือไม่
— Justin Bennett

32
"โปรดอย่าคิดว่า Common Lisp มีประโยชน์สำหรับฐานข้อมูล, Unit Test Frameworks, Spam Filters, ID3 Parsers, Web Programming, Shoutcast Servers, HTML Generation Interpreters และ HTML Generation Compiler เพียงเพราะสิ่งเหล่านี้เป็นเพียงสิ่งเดียวที่เกิดขึ้นใน หนังสือ CL Practical "
— Mikael Jansson

23
@JustinBennett ใช่คุณพูดแล้ว ที่นี่: "โดยสรุปแล้วการเรียนรู้ Lisp (หรือ Scheme) อาจไม่ได้นำไปใช้งานจริงมากมายนอกเหนือจาก AI ฉันเกลียดเวลาที่ผู้คนเผชิญหน้าในขณะที่ทำผิด
— Luka Ramishvili

127

Lisp เป็นภาษาที่มีขนาดใหญ่และซับซ้อนพร้อมด้วยรันไทม์ขนาดใหญ่และซับซ้อนเพื่อรองรับ ด้วยเหตุนี้ Lisp จึงเหมาะที่สุดสำหรับปัญหาที่มีขนาดใหญ่และซับซ้อน

ตอนนี้ที่ซับซ้อนปัญหาไม่ได้เช่นเดียวกับที่มีความซับซ้อนอย่างใดอย่างหนึ่ง ซับซ้อนปัญหาเป็นหนึ่งที่มีจำนวนมากของรายละเอียดเล็ก ๆ แต่ที่ไม่ยาก การเขียนระบบการจองสายการบินเป็นธุรกิจที่ซับซ้อน แต่การมีเงินเพียงพอและโปรแกรมเมอร์ก็ไม่ใช่เรื่องยาก ได้รับความแตกต่าง?

ปัญหาที่ซับซ้อนคือปัญหาที่ซับซ้อนซึ่งปัญหาหนึ่งที่การแบ่งแยกและการพิชิตแบบดั้งเดิมไม่ได้ผล การควบคุมหุ่นยนต์หรือการทำงานกับข้อมูลที่ไม่ใช่ตาราง (เช่นภาษา) หรือสถานการณ์ที่มีพลวัตสูง

เสียงกระเพื่อมเหมาะกับปัญหาที่วิธีแก้ปัญหาต้องขยายได้ ตัวอย่างคลาสสิกคือโปรแกรมแก้ไขข้อความ emacs สามารถตั้งโปรแกรมได้อย่างสมบูรณ์ดังนั้นสภาพแวดล้อมการเขียนโปรแกรมจึงเป็นสิทธิ์ของตัวเอง

ในหนังสือPAIP ที่มีชื่อเสียงของเขาNorvig กล่าวว่า Lisp เหมาะสำหรับการเขียนโปรแกรมเชิงสำรวจ นั่นคือการเขียนโปรแกรมวิธีแก้ปัญหาที่ยังไม่เข้าใจ (ตรงข้ามกับระบบการจองออนไลน์) กล่าวอีกนัยหนึ่ง: ปัญหาที่ซับซ้อน

นอกจากนี้การเรียนรู้ Lisp จะทำให้คุณนึกถึงบางสิ่งพื้นฐานที่ลืมไปแล้วนั่นคือความแตกต่างระหว่าง Von Neumann และ Turing อย่างที่เราทราบกันดีว่าแบบจำลองการคำนวณของทัวริงเป็นแบบจำลองทางทฤษฎีที่น่าสนใจ แต่ไม่มีประโยชน์ในการใช้เป็นแบบจำลองสำหรับการออกแบบคอมพิวเตอร์ ในทางกลับกัน Von Neumann ได้ออกแบบแบบจำลองของวิธีที่คอมพิวเตอร์และการคำนวณดำเนินการ: แบบจำลอง Von Neumann ศูนย์กลางของโมเดลฟอนนอยมันน์คือคุณมีเพียงหน่วยความจำเดียวและเก็บทั้งรหัสและข้อมูลของคุณไว้ที่นั่น สังเกตให้ดีว่าโปรแกรม Java (หรือ C # หรืออะไรก็ได้ที่คุณต้องการ) คือการแสดงโมเดลทัวริง คุณตั้งโปรแกรมของคุณอย่างเป็นรูปธรรมครั้งแล้วครั้งเล่า จากนั้นคุณหวังว่าคุณจะสามารถจัดการกับข้อมูลทั้งหมดที่ถูกโยนทิ้งไปได้

Lisp รักษาแบบจำลอง Von Neuman; ไม่มีเส้นขอบที่คมชัดและกำหนดไว้ล่วงหน้าระหว่างรหัสและข้อมูล การเขียนโปรแกรมใน Lisp เปิดใจให้คุณรับรู้ถึงพลังของโมเดลฟอนนอยมันน์ การเขียนโปรแกรมด้วยเสียงกระเพื่อมทำให้คุณเห็นแนวคิดเก่า ๆ ในแง่มุมใหม่

ในที่สุดการโต้ตอบคุณจะได้เรียนรู้ที่จะโต้ตอบกับโปรแกรมของคุณในขณะที่คุณพัฒนา (ซึ่งต่างจากการคอมไพล์และรัน) นอกจากนี้ยังเปลี่ยนวิธีการเขียนโปรแกรมและวิธีการดูโปรแกรมด้วย

ด้วยบทนำนี้ในที่สุดฉันก็สามารถตอบคำถามของคุณได้: คุณจะพบสถานที่ที่มีความหมายเหนือภาษา "ดั้งเดิม" หรือไม่

หากคุณเป็นโปรแกรมเมอร์ขั้นสูงคุณต้องมีเครื่องมือขั้นสูง และไม่มีเครื่องมือใดที่ล้ำหน้าไปกว่า Lisp อีกแล้ว หรือกล่าวอีกนัยหนึ่ง: คำตอบคือใช่ถ้าปัญหาของคุณยาก ไม่มีอย่างอื่น


30
"แต่มีเงินเพียงพอและโปรแกรมเมอร์ก็ไม่ยาก" - ที่กล่าวว่าการมีโปรแกรมเมอร์จำนวนมากเพียงพอมันเป็นไปไม่ได้ ;-)
— Jonas Kölker

ฉันได้อ่านเกี่ยวกับความสามารถของ lisps ในการสร้างโค้ดได้ทันที แต่ฉันยังอ่านว่ามันสามารถคอมไพล์ได้ .. มีการใช้งานที่สามารถผสมผสานการดำเนินการตีความและคอมไพล์ได้หรือไม่? หรือที่มีคอมไพเลอร์ของตัวเอง?
— centaurian_slug

@centaurian_slug: ใช่แน่นอน นั่นเป็นส่วนหนึ่งของพลัง เวอร์ชันใด ๆ ที่ไม่ได้ถูกทำให้พิการโดยเจตนาจะมีคอมไพเลอร์ / ล่ามพร้อมใช้งานที่รันไทม์ ตัวอย่างเช่นนักพัฒนาสามารถล็อกอินเข้าสู่การเชื่อมต่อพิเศษบนเว็บเซิร์ฟเวอร์ของเขาทำการดีบักอัปเดตคลาสและนิยามฟังก์ชันและอาจคอมไพล์ใหม่ทุกอย่างที่ขึ้นอยู่กับคำจำกัดความเหล่านั้นหากจำเป็น ทั้งหมดในขณะที่เซิร์ฟเวอร์เปิดและทำงาน อาจไม่ถูกกฎหมายในองค์กรที่กังวลเกี่ยวกับการปฏิบัติตาม SOX แต่นั่นเป็นเหตุผลหนึ่งที่อุตสาหกรรมใช้ภาษา braindead เช่น Java และ C #
— James


46

ไวยากรณ์ซับซ้อน ??

ไวยากรณ์ของเสียงกระเพื่อมนั้นง่ายมาก

app นักฆ่าที่เขียนในเสียงกระเพื่อม: emacs Lisp จะช่วยให้คุณสามารถขยาย emac ได้ตามต้องการเพื่อทำเกือบทุกอย่างที่คุณคิดว่าตัวแก้ไขอาจทำได้

แต่คุณควรเรียนรู้เสียงกระเพื่อมถ้าคุณต้องการและคุณอาจไม่เคยใช้ในที่ทำงานเลย แต่ก็ยังยอดเยี่ยม

นอกจากนี้ฉันต้องการเพิ่ม: แม้ว่าคุณจะพบสถานที่ที่เสียงกระเพื่อมจะสมเหตุสมผล แต่คุณก็ไม่อาจโน้มน้าวคนอื่นได้ว่าควรใช้กับ java, c ++, c #, python, Ruby และอื่น ๆ


@ จัสติน: อาจเป็นที่น่าสังเกตว่าแกน emacs เขียนด้วย C. แต่นั่นเป็นเพียงการเลือกเพียงเล็กน้อยเท่านั้น - คำสั่งทั้งหมดเขียนด้วย elisp
— Bernard

3
หรือมากกว่า - ไวยากรณ์หลักของเสียงกระเพื่อมธรรมดานั้นเรียบง่าย defmacro ช่วยให้สามารถขยายไวยากรณ์ได้และมาโครในตัวบางตัว (เช่น defmacro) อาจมีความซับซ้อนอย่างไม่น่าเชื่อ รายการแลมบ์ดาแบ็คควอตซ้อนกัน ฯลฯ
— แอรอน

เกือบจะยุติธรรมแล้วที่จะบอกว่าส่วน C ของ emacs เป็นรหัสกาว
— Luka Ramishvili

ตามคู่มืออ้างอิงของ Emacs "คำสั่งการแก้ไขส่วนใหญ่ใน Emacs เขียนด้วย Lisp ข้อยกเว้นบางประการสามารถเขียนด้วย Lisp แต่ใช้ C แทนเพื่อประสิทธิภาพ" gnu.org/software/emacs/manual/html_mono/emacs.html#Intro
— dpritch

25

ฉันไม่สามารถตอบจากประสบการณ์มือแรก แต่คุณควรอ่านสิ่งที่พอลเกรแฮมเขียนในเสียงกระเพื่อม สำหรับ "นักฆ่าแอป" ส่วนหนึ่งอ่านตีค่าเฉลี่ย


2
+1 คำตอบนี้ควรกล่าวถึง Yahoo Stores ซึ่งเป็นเว็บแอปแรกถูกเขียนด้วยเสียงกระเพื่อมบางส่วน อ้างถึง Wikipedia: ในปี 1998 Yahoo! Inc. ซื้อ Viaweb ในราคา 455,000 หุ้นของ Yahoo! หุ้นมูลค่าประมาณ 49 ล้านดอลลาร์และเปลี่ยนชื่อเป็น Yahoo! เก็บ.
— Steven Lu

17

ฉันตั้งโปรแกรมใน Lisp อย่างมืออาชีพเป็นเวลาประมาณหนึ่งปีและมันก็คุ้มค่าที่จะเรียนรู้ คุณจะมีโอกาสที่ไม่มีใครเทียบได้ในการลบความซ้ำซ้อนออกจากโค้ดของคุณโดยสามารถแทนที่โค้ดสำเร็จรูปทั้งหมดด้วยฟังก์ชันหากเป็นไปได้และมาโครที่ไม่สามารถทำได้ นอกจากนี้คุณยังสามารถเข้าถึงความยืดหยุ่นที่เหนือชั้นที่รันไทม์แปลระหว่างโค้ดและข้อมูลได้อย่างอิสระ ดังนั้นสถานการณ์ที่การกระทำของผู้ใช้สามารถกระตุ้นให้เกิดความจำเป็นในการสร้างโครงสร้างที่ซับซ้อนแบบไดนามิกจึงเป็นจุดที่ Lisp เปล่งประกายอย่างแท้จริง ตารางเที่ยวบินของสายการบินยอดนิยมเขียนด้วยภาษาลิสป์และยังมี CAD / CAM จำนวนมากใน Lisp


9

หากคุณชอบการเขียนโปรแกรมคุณควรเรียนรู้ Lisp เพื่อความสุขที่แท้จริงของมัน XKCDแสดงออกถึงการรู้แจ้งทางปัญญาที่เกิดขึ้นอย่างสมบูรณ์แบบ การเรียนรู้ Lisp มีไว้สำหรับโปรแกรมเมอร์ว่าการทำสมาธิเป็นอย่างไรสำหรับพระในพระพุทธศาสนา (และฉันหมายถึงสิ่งนี้โดยไม่มีความหมายแฝงเชิงลบหลู่)


9

Lisp มีประโยชน์มากสำหรับการสร้าง DSL เล็ก ๆ น้อย ๆ ฉันมีสำเนาของ Lisp ในกล่องที่ทำงานอยู่และฉันได้เขียน DSL เล็กน้อยเพื่อซักถามฐานข้อมูลเซิร์ฟเวอร์ SQL และสร้างชั้นข้อมูล ฯลฯ ใน C # ตอนนี้รหัสแผ่นหม้อไอน้ำทั้งหมดของฉันถูกเขียนด้วยมาโคร lisp ที่ส่งออกไปยัง C # ฉันสร้าง HTML, XML ทุกอย่างด้วยมัน ในขณะที่ฉันหวังว่าฉันจะใช้ Lisp ในการเขียนโค้ดในชีวิตประจำวันได้ แต่ Lisp สามารถนำมาใช้ประโยชน์ได้จริง


ฉันใช้dotlisp.sourceforge.net/dotlisp.htmสำหรับสิ่งนี้
— Mark Hurd

5

ภาษาใด ๆ จะดูยากขึ้นมากเมื่อไม่ใช้รูปแบบการเยื้องทั่วไปของภาษา เมื่อมีคนติดตามพวกเขาของ Lisp เราจะเห็นว่ามันแสดงออกถึงโครงสร้างของโครงสร้างไวยากรณ์ได้อย่างไร (โปรดทราบว่าสิ่งนี้ไม่ถูกต้องนักเพราะการแสดงตัวอย่างอยู่เพียงเล็กน้อย r ควรสอดคล้องกับ fns ในอาร์กิวเมนต์ Quicksort แบบเรียกซ้ำ):

(defun quicksort (lis) 
  (if (null lis) 
      nil
      (let* ((x (car lis)) 
             (r (cdr lis)) 
             (fn (lambda (a) 
                   (< a x))))
         (append (quicksort (remove-if-not fn 
                                           r)) 
                 (list x)
                 (quicksort (remove-if fn 
                                       r))))))

1
ฉันคิดว่ามีการวิจารณ์ที่ยุติธรรมในสิ่งที่คุณพูด ฉันหมายถึงแค่บอกว่า "มันดูยากกว่าที่คุณนำเสนอมาและดูชัดเจนกว่าที่นำเสนอที่นี่" ฉันคิดว่าคุณจะต้องยอมรับว่าหลายภาษาดูสับสนมากขึ้นหากไม่ปฏิบัติตามรูปแบบการเยื้อง นอกจากนี้หากเราเปรียบเทียบการเยื้องของ Java และ Lisp ฉันจะบอกว่าโดยทั่วไปแล้วพวกเขาต้องการความรู้เกี่ยวกับโครงสร้างพื้นฐานของแต่ละภาษาในระดับเดียวกันเพื่อเยื้องให้ถูกต้อง แต่ก็ยุติธรรมแม้ว่าจะเป็นเรื่องส่วนตัว แต่ก็ยังดูยาก
— John กับวาฟเฟิล

1
เพื่อให้ง่ายขึ้นคุณสามารถใช้มาตรฐานletและใช้ a defunที่จุดเริ่มต้นของฟังก์ชันเพื่อกำหนดfnตามที่มันไม่เปลี่ยนแปลง
— Aaron Robson

4
@FerretallicA คุณพิจารณาจากพื้นฐานใดว่าบางสิ่ง“ มนุษย์อ่านได้ง่าย” หรือ“ อธิบายตัวเอง”? ความคล้ายคลึงกับภาษาอังกฤษ? ภาษาจีน“ มนุษย์อ่านง่าย” หรือไม่? แล้วสัญกรณ์ทางคณิตศาสตร์ล่ะ? มัน“ ไม่ใช่เรื่องง่ายที่มนุษย์จะอ่านได้”? การโต้เถียงแบบนี้เป็นการพูดพล่อยๆที่น่ารำคาญเพราะข้อความที่ซ่อนอยู่คือ:“ สิ่งนี้ดูไม่เหมือนวิธีที่ฉันเรียนรู้ที่จะให้เหตุผลครั้งแรก”

3
ดูเหมือนคำว่า "การโต้แย้ง" ของคุณจะเหมือน "Whinge whinge" มากกว่า ลองทดสอบการใช้ภาษาโปรแกรม นำคนที่ไม่ได้ตั้งโปรแกรมมาก่อนและแสดงหน้ารหัส VB ​​และหน้าของรหัส Lisp ฉันจะเดิมพันน็อตซ้ายของฉันอย่างมีความสุขว่าผู้สังเกตการณ์แบบสบาย ๆ จะจับข้อสังเกตที่มีความหมายได้ง่ายกว่า
— nathanchere

1
ฉันสงสัยว่าคนจีนญี่ปุ่นเกาหลีสุเมเรียนฮินดีหรืออารบิกที่ไม่ใช่โปรแกรมเมอร์จะคิดว่าคุณอยากจะยอมแพ้ลูกอัณฑะของคุณสำหรับการโต้แย้งที่เข้าใจง่าย

4

ฉันพบว่าการเรียนรู้ภาษาใหม่มีผลต่อรูปแบบการเขียนโปรแกรมของคุณในภาษาที่คุณรู้จักอยู่แล้วเสมอ สำหรับฉันมันทำให้ฉันคิดวิธีต่างๆในการแก้ปัญหาในภาษาหลักของฉันอยู่เสมอซึ่งก็คือ Java ฉันคิดว่าโดยทั่วไปแล้วมันจะทำให้ขอบฟ้าของคุณกว้างขึ้นในแง่ของการเขียนโปรแกรม


เป็นเพราะคุณเป็นโปรแกรมเมอร์ที่ดี โปรแกรมเมอร์ที่ไม่ดีแทนที่จะส่งอิทธิพลต่อทักษะเก่าด้วยความรู้ใหม่ให้คิดในภาษาที่รู้จักแล้วในขณะที่เขียนเป็นภาษาใหม่ แต่ทำไมคุณถึงใช้ Java หลังจากเสียงกระเพื่อม? :) Java ใช้ยากที่สุดรองจาก Lisp, imo
— Luka Ramishvili

4

ถ้าคุณต้องถามตัวเองว่าคุณควรเรียนรู้เสียงกระเพื่อมคุณคงไม่จำเป็นต้องทำ


8
ฉันจะพูดในทางตรงกันข้าม: ถ้าคุณเข้าใจเสียงกระเพื่อมแล้วเพราะคุณมีประสบการณ์กับภาษาที่คล้ายกันก็อาจไม่จำเป็น หากคุณไม่เข้าใจว่าเสียงกระเพื่อมมีให้คุณได้ประโยชน์อะไรจากการสัมผัส
— Mr Fooz

@MrFooz ไม่มีภาษาที่คล้ายกันที่สามารถขจัดความจำเป็นในการเรียนรู้ส่วนที่น่าเบื่อของเสียงกระเพื่อมได้ ไม่พบคุณสมบัติหลักของเสียงกระเพื่อมในภาษาใด ๆ แม้ว่าส่วนใหญ่จะเป็น
— Luka Ramishvili

ขึ้นอยู่กับเป้าหมายของคุณ ถ้าคุณอยากตายคุณไม่จำเป็นต้องหายใจ แต่นั่นไม่ได้หมายความว่าคุณไม่ควร
— mimoralea

4

ฉันเรียน "คลาสเสียงกระเพื่อม" ในวิทยาลัยในช่วงทศวรรษที่แปดสิบ แม้จะมี grokking แนวคิดที่นำเสนอในระดับที่ฉันถูกทิ้งไว้โดยไม่ต้องใด ๆขอบคุณสำหรับสิ่งที่ทำให้ดีกระเพื่อม ฉันกลัวว่าผู้คนจำนวนมากมองว่าเสียงกระเพื่อมเป็นเพียงภาษาโปรแกรมอื่นซึ่งเป็นสิ่งที่หลักสูตรในวิทยาลัยทำกับฉันเมื่อหลายปีก่อน หากคุณเห็นใครบางคนบ่นเกี่ยวกับวากยสัมพันธ์ของเสียงกระเพื่อม (หรือขาดสิ่งนั้น) มีโอกาสดีที่พวกเขาจะเป็นหนึ่งในคนเหล่านั้นที่ไม่เข้าใจความยิ่งใหญ่ของเสียงกระเพื่อม ฉันเป็นหนึ่งในคนเหล่านั้นเป็นเวลานานมาก

จนกระทั่งสองทศวรรษต่อมาเมื่อฉันกลับมาสนใจเรื่องเสียงกระเพื่อมฉันก็เริ่ม "เข้าใจ" สิ่งที่ทำให้เสียงกระเพื่อมน่าสนใจสำหรับฉันอยู่ดี หากคุณสามารถเรียนรู้เสียงกระเพื่อมได้โดยไม่ต้องกังวลกับการปิดและมาโครเสียงกระเพื่อมคุณอาจพลาดประเด็นนี้ไป


ฉันสองที่ ตอนนี้ฉันอยู่ในการจู่โจมครั้งที่สองที่ลิสป์อยู่นอกโรงเรียน 5 ปี ระยะหนึ่งของ Lisp เมื่อคุณยังเป็นสีเขียวอาจไม่มีผลเพียงพอ - ฉันจำได้ว่ามุ่งเน้นไปที่การเขียนโปรแกรม metaprogramming เท่านั้นและยังไม่ได้ชื่นชมกับการเขียนโปรแกรมและความยืดหยุ่น
— Aaron

4

การเรียนรู้ LISP / Scheme อาจไม่ทำให้คุณมีพื้นที่แอปพลิเคชันที่เพิ่มขึ้น แต่จะช่วยให้คุณเข้าใจการเขียนโปรแกรมเชิงฟังก์ชันกฎและข้อยกเว้นได้ดีขึ้น

มันคุ้มค่ากับการลงทุนเวลาเพียงเพื่อเรียนรู้ความแตกต่างของความสวยงามของฟังก์ชันบริสุทธิ์ 6 ฟังก์ชันที่ซ้อนกันและฝันร้ายของฟังก์ชันซ้อนกัน 6 ฟังก์ชันที่มีผลข้างเคียง


4

จากhttp://www.gigamonkeys.com/book/introduction-why-lisp.html

หนึ่งในตำนานที่เกิดซ้ำบ่อยที่สุดเกี่ยวกับ Lisp คือ "ตายแล้ว" แม้ว่าจะเป็นเรื่องจริงที่ Common Lisp ไม่ได้ใช้กันอย่างแพร่หลายเช่น Visual Basic หรือ Java แต่ก็ดูแปลกที่จะอธิบายภาษาที่ยังคงใช้สำหรับการพัฒนาใหม่ ๆ และยังคงดึงดูดผู้ใช้ใหม่ว่า "ตาย" เรื่องราวความสำเร็จของ Lisp ล่าสุด ได้แก่ Viaweb ของ Paul Graham ซึ่งกลายเป็น Yahoo Store เมื่อ Yahoo ซื้อ บริษัท ของเขา ระบบการกำหนดราคาตั๋วเครื่องบินและการซื้อสินค้าของ ITA Software, QPX ซึ่งใช้โดยผู้ขายตั๋วออนไลน์ Orbitz และอื่น ๆ เกมของ Naughty Dog สำหรับ PlayStation 2, Jak และ Daxter ซึ่งส่วนใหญ่เขียนด้วยภาษา Lisp เฉพาะโดเมนที่ Naughty Dog ประดิษฐ์ขึ้นเรียกว่า GOAL ซึ่งคอมไพเลอร์เขียนเองด้วย Common Lisp; และ Roomba เครื่องดูดฝุ่นหุ่นยนต์อัตโนมัติซึ่งมีซอฟต์แวร์เขียนเป็น L ซึ่งเป็นชุดย่อยที่เข้ากันได้ของ Common Lisp บางทีการบอกเล่าเพิ่มเติมคือการเติบโตของเว็บไซต์ Common-Lisp.net ซึ่งโฮสต์โครงการ Common Lisp แบบโอเพ่นซอร์สและจำนวนกลุ่มผู้ใช้ Lisp ในท้องถิ่นที่เพิ่มขึ้นในช่วงสองสามปีที่ผ่านมา


4

"เสียงกระเพื่อมเป็นสิ่งที่ควรค่าแก่การเรียนรู้สำหรับประสบการณ์การรู้แจ้งที่ลึกซึ้งที่คุณจะได้รับเมื่อคุณได้รับมันในที่สุดประสบการณ์นั้นจะทำให้คุณเป็นโปรแกรมเมอร์ที่ดีขึ้นตลอดทั้งวันแม้ว่าคุณจะไม่เคยใช้ Lisp มากนักก็ตาม"

- เอริกเอสเรย์มอนด์ "จะเป็นแฮ็กเกอร์ได้อย่างไร"

http://www.paulgraham.com/avg.html


3

ฉันยอมรับว่า Lisp เป็นหนึ่งในภาษาที่คุณอาจไม่เคยใช้ในเชิงพาณิชย์ แต่ถึงแม้ว่าคุณจะไปไม่ถึง แต่การเรียนรู้มันจะช่วยเพิ่มความเข้าใจในการเขียนโปรแกรมโดยรวมได้อย่างแน่นอน ตัวอย่างเช่นฉันเรียน Prolog ในวิทยาลัยและในขณะที่ฉันไม่เคยใช้มันเลยหลังจากนั้นฉันก็ทำให้ฉันมีความเข้าใจมากขึ้นเกี่ยวกับแนวคิดการเขียนโปรแกรมจำนวนมากและ (ในบางครั้ง) ก็รู้สึกขอบคุณมากขึ้นสำหรับภาษาที่ฉันใช้

แต่ถ้าคุณกำลังจะเรียนรู้ ... โดยทั้งหมดอ่านOn Lisp


หมายเหตุเล็ก ๆ : On Lisp ไม่ใช่คำแนะนำที่เหมาะสมสำหรับ Lisp โปรดอ่านอย่างอื่นก่อน ฉันขอแนะนำ Practical Common Lisp
— Luís Oliveira

3

การเรียนรู้ lisp จะทำให้ Javascript แตกต่างไปจากเดิมอย่างสิ้นเชิง! เสียงกระเพื่อมบังคับให้คุณเข้าใจทั้งการเรียกซ้ำและ "ฟังก์ชันทั้งหมดเป็นวัตถุชั้นหนึ่ง" -paradigm ดูบทความดี Crockfords ในโครงการ VS Javascript Javascript อาจเป็นภาษาที่สำคัญที่สุดในปัจจุบันดังนั้นการทำความเข้าใจให้ดีขึ้นจึงมีประโยชน์อย่างมาก!


1
ภาษาสำคัญที่สุด? ฉันคิดว่าไม่ครับ
— TraumaPony

7
มันมีให้บริการบนอุปกรณ์ทุกชนิดที่มีเว็บเบราว์เซอร์ (และอาจมีไม่กี่ตัวที่ไม่มี) ดังนั้นภาษาสำหรับการใช้งานแอปพลิเคชันของผู้ใช้ปลายทางอาจเป็นภาษาที่มีการใช้งานสูงที่สุดในโลก . เห็นได้ชัดว่าคุณอาจมีความคิดเห็นที่แตกต่างกันอย่างสิ้นเชิงเกี่ยวกับสิ่งที่สำคัญ จะใช้รักษามะเร็งได้หรือไม่? อาจจะไม่. แต่จะชอบหรือไม่มันจะเป็นหนึ่งในมุมสำคัญของการพัฒนาแอปพลิเคชัน (เว็บ) ในอีกหลายปีข้างหน้า
— Erlend Halvorsen

1
ฉันไปทางเดียวกัน! แม้ว่าฉันจะใช้คุณสมบัติการทำงานและการสร้างต้นแบบของ Javascript อยู่แล้ว แต่หลังจากเรียนรู้ Lisp Javascript ก็เป็นภาษาใหม่สำหรับฉัน
— Luka Ramishvili


3

โอเคฉันอาจจะแปลก แต่ฉันไม่ชอบบทความของ Paul Graham ที่ว่ามาก & เกี่ยวกับ Lisp เป็นหนังสือที่หยาบมากถ้าคุณไม่เข้าใจ Common Lisp อยู่แล้ว แต่ผมว่าไปสำหรับ Siebel ของการปฏิบัติ Common เสียงกระเพื่อม สำหรับ "แอปนักฆ่า" Common Lisp ดูเหมือนจะพบได้ในร้านค้าเฉพาะกลุ่มเช่นITAดังนั้นแม้ว่าจะไม่มีแอปที่มีความหมายเหมือนกันกับ CL เหมือนอย่างที่ Rails ใช้สำหรับ Ruby แต่ก็มีสถานที่ในอุตสาหกรรมที่ใช้มันหากคุณทำ ขุดเล็กน้อย


2

ไวยากรณ์ที่ซับซ้อน? ความงามของเสียงกระเพื่อมคือมันมีไวยากรณ์ที่เรียบง่ายอย่างน่าขัน เป็นเพียงรายการโดยแต่ละองค์ประกอบของรายการอาจเป็นรายการอื่นหรือประเภทข้อมูลพื้นฐานก็ได้

ควรค่าแก่การเรียนรู้เนื่องจากวิธีนี้ช่วยเพิ่มความสามารถในการเขียนโค้ดของคุณในการคิดและใช้ฟังก์ชันเป็นเพียงประเภทข้อมูลอื่น สิ่งนี้จะปรับปรุงวิธีการเขียนโค้ดด้วยภาษาที่จำเป็นและ / หรือเชิงวัตถุเพราะจะช่วยให้คุณมีความยืดหยุ่นทางจิตใจมากขึ้นด้วยวิธีการจัดโครงสร้างโค้ดของคุณ


2

หากต้องการเพิ่มคำตอบอื่น ๆ :

เนื่องจากหลักสูตรSICP (ดูวิดีโอได้ที่นี่ ) นั้นยอดเยี่ยมมาก: สอน Lisp และอื่น ๆ อีกมากมาย !


2

แอพ Killer? Franz Inc.มีรายการเรื่องราวความสำเร็จมากมายแต่รายการนี้รวมเฉพาะผู้ใช้ AllegroCL ... อาจมีคนอื่น ๆ เรื่องโปรดของฉันคือเรื่องราวเกี่ยวกับ Naughty Dogเนื่องจากฉันเป็นแฟนตัวยงของเกม Crash Bandicoot

สำหรับการเรียนรู้ Common เสียงกระเพื่อมผมอยากแนะนำให้ปฏิบัติ Common เสียงกระเพื่อม มันมีแนวทางปฏิบัติที่อย่างน้อยสำหรับฉันก็ทำให้มันง่ายกว่าหนังสือเล่มอื่น ๆ ที่ฉันเคยดู


2

คุณสามารถใช้Clojureวันนี้เพื่อเขียนการทดสอบและสคริปต์ที่ด้านบนของ Java VM แม้ว่าจะมีภาษา Lisp อื่น ๆ ที่ใช้กับ JVM แต่ฉันคิดว่า Clojure ทำงานได้ดีที่สุดในการผสานรวมกับ Java

มีหลายครั้งที่ภาษา Java เข้ามาขัดขวางการเขียนโค้ด Java (รวมถึง "การเขียนโปรแกรมเชิงพาณิชย์แบบเดิม") (ฉันไม่ได้หมายความว่าเป็นคำฟ้องของ Java ภาษาอื่น ๆ ประสบปัญหาเดียวกัน แต่เป็นความจริงเนื่องจากหัวข้อไม่ใช่ Java ฉันจะไม่อธิบายอย่างละเอียดโปรดอย่าลังเลที่จะเริ่มหัวข้อใหม่หาก มีคนต้องการคุยเรื่องนี้) Clojure ช่วยขจัดอุปสรรคมากมายเหล่านั้น


2

สามารถใช้ Lisp ได้ทุกที่ที่คุณใช้การเขียนโปรแกรมแบบเดิม มันไม่ได้แตกต่างกันแค่มีพลังมากกว่า เขียนเว็บแอป? คุณสามารถทำได้ด้วยเสียงกระเพื่อมเขียนแอปพลิเคชันบนเดสก์ท็อป? คุณสามารถทำได้บน Lisp ไม่ว่าคุณจะทำอะไรก็ได้ใน Lisp หรือ Python หรือการเขียนโปรแกรมทั่วไปอื่น ๆ (มีไม่กี่ภาษาที่เหมาะสำหรับงานเดียวเท่านั้น)

อุปสรรคที่ใหญ่ที่สุดน่าจะเป็นการยอมรับเจ้านายเพื่อนหรือลูกค้าของคุณ นั่นคือสิ่งที่คุณจะต้องทำงานร่วมกับพวกเขา การเลือกโซลูชันที่ใช้งานได้จริงเช่นClojureที่สามารถใช้ประโยชน์จากฐานการติดตั้งปัจจุบันของโครงสร้างพื้นฐาน Java จาก JVM ไปยังไลบรารีอาจช่วยคุณได้ นอกจากนี้หากคุณมีโปรแกรม Java คุณสามารถสร้างสถาปัตยกรรมปลั๊กอินและเขียนปลั๊กอิน Clojure ได้และเขียนโค้ดครึ่งหนึ่งของคุณใน Clojure


1

ไม่ใช่เหตุผล แต่ (เล็กน้อย) AutoCAD มีการสนับสนุนรันไทม์ LISP & DCL เป็นวิธีที่สะดวกในการเขียนมาโครที่ซับซ้อน (รวมถึงระบบอัตโนมัติ ActiveX) หากคุณไม่ต้องการใช้ VBA หรือ C ++ หรือ. NET SDK หรือถ้านิพจน์ DIESEL ไม่ได้ตัดออก

ฟังก์ชั่นมากมายของ AutoCAD เป็นกิจวัตร LISP


1

นี่เป็นหัวข้อที่ฉันได้ไตร่ตรองมาระยะหนึ่งแล้ว แต่ฉันไม่ได้ตัดสินใจจริงๆเพราะเวลาปกติเป็นปัญหาหลัก ... ;)

และเนื่องจากฉันไม่พบลิงก์เหล่านี้ในโพสต์นี้ฉันจึงเพิ่มลิงก์เหล่านี้เพื่อประโยชน์สาธารณะ:

เรื่องราวความสำเร็จและความล้มเหลว: Lisping ที่ JPL

เรื่องราวความสำเร็จที่น่าประทับใจจริงๆ: Lisp ถูกนำไปใช้ที่ Orbitz Corporation

การเปรียบเทียบและวิเคราะห์ว่าจะใช้ Lisp แทน Java: Lisp เป็นทางเลือกสำหรับ Java หรือไม่




0

แอพ Killer? เครื่องมือค้นหาเที่ยวบินโดย ITA Software เป็นหนึ่งเดียว

สำหรับ "ทำไม" ส่วนใหญ่อาจทำให้คุณเป็นนักพัฒนาที่ดีขึ้นและไม่น่าจะทำให้คุณแย่ลงอย่างมาก อย่างไรก็ตามอาจทำให้คุณชอบภาษาถิ่นของ lisp มากกว่าภาษาอื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.