ทำไมฉันจึงควรเรียนรู้ 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.