Scheme vs Haskell สำหรับการแนะนำการเขียนโปรแกรมเชิงฟังก์ชั่น?


36

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

Haskell หรือ Scheme ใดที่จะทำหน้าที่เป็นบทนำที่ดีในการเขียนโปรแกรมการทำงาน ฉันใช้ emacs เป็นเครื่องมือแก้ไขข้อความและต้องการให้สามารถกำหนดค่าได้ง่ายขึ้นในอนาคตซึ่งจะทำให้เกิดการเรียนรู้ Emacs Lisp อย่างไรก็ตามความเข้าใจของฉันคือ Emacs Lisp นั้นค่อนข้างแตกต่างจาก Scheme และยังเป็นขั้นตอนที่มากกว่าการทำงาน

ฉันน่าจะใช้หนังสือ "The Little Schemer" ซึ่งฉันได้ซื้อไปแล้วถ้าฉันติดตาม Scheme (ดูเหมือนว่าฉันจะแปลกเล็กน้อยจากการ จำกัด การอ่านผ่าน) หรือจะใช้ "Learn You a Haskell เพื่อสิ่งดีๆ" ถ้าฉันติดตาม Haskell ฉันจะดูวิดีโอแนะนำ Intro ถึง Haskell โดย Dr Erik Meijer ทางช่อง 9

ข้อเสนอแนะข้อเสนอแนะหรือการป้อนข้อมูลชื่นชมใด ๆ

ขอบคุณ

PS BTW ฉันยังสามารถเข้าถึง F # ได้เนื่องจากฉันมี Visual Studio 2010 ซึ่งฉันใช้สำหรับการพัฒนา C # แต่ฉันไม่คิดว่าควรจะเป็นเกณฑ์หลักในการเลือกภาษา


3
อย่าลืมReal World Haskell
ทางเลือก

14
ความคิดเห็นด้านข้างเล็กน้อย: แคลคูลัสแลมบ์ดาเป็นระบบที่เรียบง่ายเป็นพิเศษ สิ่งที่ยอดเยี่ยมเกี่ยวกับมันไม่ใช่ว่ามันซับซ้อน แต่ตรงกันข้าม ที่คุณสามารถแสดงทุกสิ่งที่คุณต้องการในระบบที่เรียบง่าย เริ่มด้วยภาษาโปรแกรม ตอนนี้โยนทุกอย่างยกเว้นการอ้างอิงตัวแปรคำจำกัดความของฟังก์ชันและการเรียกใช้ฟังก์ชัน Voila! แลมบ์ดาแคลคูลัส


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

5
ฉันเลือก Haskell มากกว่า Scheme เป็นหลักเพราะมันไม่มีวงเล็บเยอะมาก!
Joey Adams

คำตอบ:


27

ฉันจะแนะนำ OCaml

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

ระหว่าง Scheme, ML และ Haskell ฉันจะเลือก ML เพราะฉันคิดว่ามันเกี่ยวข้องกับคำนิยามนี้มากที่สุด Scheme ไม่มีการพิมพ์แบบสแตติก (มี Typed Racket แต่ไม่ใช่สำหรับผู้เริ่มต้นโครงร่าง) และ Haskell มีสิ่งอื่น ๆ มากเกินไป (monads การประเมินผลที่ขี้เกียจ ... ) ที่น่าสนใจอาจเบี่ยงเบนความสนใจจากพื้นฐานที่สำคัญ .

SML และ OCaml มีความน่าสนใจไม่แพ้กัน ฉันคุ้นเคยกับ OCaml มากขึ้นและมีความรู้สึก "เชิงปฏิบัติ" มากขึ้นซึ่งเป็นสิ่งที่ดี (แต่ถ้าคุณต้องการ "การปฏิบัติ" จริง ๆ ต่อความเสี่ยงที่จะเสียชีวิตคุณอาจเลือก F #)

Scheme และ Haskell เป็นภาษาที่น่าสนใจเช่นกัน แผนการเน้นมาโครนั้นเป็นเรื่องที่น่าสนใจ แต่ไม่เกี่ยวข้องโดยตรงกับการเขียนโปรแกรมการทำงาน (เป็นอีกสิ่งหนึ่งในโลกที่คุณควรลองเช่นเดียวกับการเขียนโปรแกรมเชิงตรรกะภาษาอิงสแต็กและ E เชิงความสามารถ)

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

ในทำนองเดียวกันเมื่อคุณเห็น OCaml และอาจเป็น Haskell และยังต้องการเรียนรู้เพิ่มเติมคุณควรดู Coq หรือ Agda แต่มีน้อยคนที่จะแนะนำ Coq หรือ Agda สำหรับการแนะนำครั้งแรกในการเขียนโปรแกรมการทำงาน

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

สำหรับการเรียนรู้ OCaml ฉันจะแนะนำร่างหนังสือเจสัน Hickey ของ (PDF)

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


3
ขอบคุณที่ผลักฉันเข้าหา OCaml และใช่ฉันจะเสี่ยงดวงวิญญาณและสำรวจ F # ฉันพัฒนาสำหรับ Linux, Mac OS X และ Windows (ส่วนใหญ่เป็นรุ่นก่อนหน้า) แต่ FSI นั้นมีให้ใช้งานสำหรับทั้งสามแพลตฟอร์ม (ใช้งาน mono บน Linux และ Mac OS X) ซึ่งฉันทำไปแล้ว ความจริงที่ว่าน้ำหนักทั้งหมดของ Microsoft อยู่เบื้องหลังภาษาการเขียนโปรแกรมการทำงาน (แม้ว่าจะเป็น "ไม่บริสุทธิ์" อย่างใดอย่างหนึ่ง) ควรได้รับการต้อนรับมากกว่าแฟน ๆ ของการเขียนโปรแกรมฟังก์ชั่นการทำงาน
haziz

SML นั้นตายแล้ว ocaml มีอยู่ให้เขียน coq
permeakra

1
+1 สำหรับ ML; มันชัดเจนกว่า Haskell
m3th0dman

ฉันคิดว่ามันเป็นความคิดที่ดีในการเรียนรู้ SML หรือ OCaml แล้ว Haskell (+1) หลังจากรู้ภาษาเหล่านี้แล้วการหยิบภาษาอื่นขึ้นมา (เช่น Scala) นั้นง่ายมาก นอกจากนี้เราสามารถดู Scheme, Common Lisp และ Clojure (ตามลำดับนี้) เพื่อให้ได้ความรู้สึกของภาษาแบบไดนามิก
Giorgio

@haziz: แม้ว่าพวกเขาจะสร้างซอฟต์แวร์ที่ดี Microsoft (หรือสำหรับเรื่องนั้น Oracle ฯลฯ ) ยังคงเป็นผู้ผูกขาดโดยมีการกระทำที่ไม่ดีเช่นการล็อคลูกค้ารูปแบบที่เข้ากันไม่ได้การใช้งานที่ไม่เข้ากัน ฯลฯ
Giorgio

26

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

หากคุณต้องการคำแนะนำเกี่ยวกับการออกแบบฟังก์ชั่นให้ไปที่ Scheme ไวยากรณ์ง่ายต่อการเรียนรู้และอ่าน มันไม่อนุญาตให้มีการโปรแกรมแบบโพรซีเดอร์ แต่เพียงแค่ลงโทษตัวเองไม่ให้ใช้โพรซีเดอร์ใด ๆ ที่มีชื่อ!ท้ายชื่อ

ด้วย Scheme คุณสามารถอ่านโครงสร้างและการแปลความหมายของโปรแกรมคอมพิวเตอร์ซึ่งเป็นบทนำที่ดีที่สุดสำหรับกระบวนทัศน์การเขียนโปรแกรม มีการบรรยายเกี่ยวกับหนังสือเล่มนี้จากทั้งสองMITและเบิร์กลีย์


4
"ไวยากรณ์ง่ายต่อการเรียนรู้และอ่าน" เป็นเรื่องส่วนตัวมาก

6
@luqui: จริง บางที 'ปกติ' อาจเป็นคำที่ดีกว่า ไม่มี backticks, infixes, ลำดับความสำคัญ, หรือปัญหาการเชื่อมโยง - เพียงแค่วงเล็บ, วงเล็บนรกที่โง่เง่ามาก
Hoa Long Tam

17

แน่นอนคำตอบที่ถูกต้องคือแน่นอนทั้งคู่! ดังนั้นมันจึงเป็นคำถามของภาษาที่ต้องจัดการก่อน สถานการณ์ของฉันเหมือนกับของคุณ ฉันสนุกกับ The Little Schemer อย่างมาก แน่นอนคุณจะเข้าใจโครงสร้างพื้นฐานของการเขียนโปรแกรมการทำงานหลังจากผ่าน (และมีที่สำหรับใส่คราบเยลลี่ของคุณ!)

ฉันประมาณหนึ่งในสี่เข้าสู่ Learn You a Haskell เพื่อผลงานที่ยอดเยี่ยม ฉันสนุกกับมันไม่น้อย แต่หนังสือสองเล่มก็ไม่แตกต่างกัน Learn You a Haskell มีวิธีการสอนภาษาแบบดั้งเดิม The Little Schemer นั้นมีลักษณะเฉพาะกับ Scheme แต่เห็นได้ชัดว่าเกี่ยวข้องกับการสอนพื้นฐานของการเขียนโปรแกรมการทำงานไม่ใช่ภาษาของ Scheme

ฉันขอแนะนำให้เริ่มต้นด้วย The Little Schemer มันใช้งานได้จริง แต่มีพื้นฐานมากกว่า


17

สองเซ็นต์ของฉันที่เกี่ยวกับการเขียนโปรแกรมการทำงานคือการไม่ได้วางสายในภาษาเฉพาะ แต่เรียนรู้แนวคิดหลักของการเขียนโปรแกรมการทำงาน ฉันเรียนรู้การเขียนโปรแกรมการทำงานโดยการโยนหัวทิ่มเข้าไปในโครงการที่หัวหน้าของฉันยืนยันว่าการพัฒนาทั้งหมดจะต้องทำใน APL APL เป็นภาษาการประมวลผลอาเรย์ที่ใช้งานได้และอยู่ไกลจาก LISP, Haskell หรือภาษาการเขียนโปรแกรมหลักอื่น ๆ เท่าที่คุณจะได้รับ ผลตอบแทนที่แท้จริงคือเมื่อฉันพบว่าเมื่อฉัน "grokked" กระบวนทัศน์การเขียนโปรแกรมการทำงานและเรียนรู้จิตใจวิธีการสลายปัญหาโดยอัตโนมัติอย่างน่าอัศจรรย์เป็นโปรแกรมการทำงานฉันก็ไม่กลัวอีกต่อไปโดยลักษณะของภาษาการทำงานอื่น ๆ เช่น Haskell OCaml, Scheme, Scala และ Clojure ผม'

ถ้าฉันต้องเลือกภาษาที่ใช้งานได้อันดับแรกฉันอาจเลือก Haskell หรือ Steel Bank Common Lisp (SBCL) สำหรับ Haskell ฉันจะอ่านLearn You a Haskell ... , Real World Haskell , The Haskell Road to Logic, คณิตศาสตร์และการเขียนโปรแกรมและไข่มุกแห่งการออกแบบอัลกอริทึมการทำงาน สำหรับ CL ผมอ่านดินแดนแห่งเสียงกระเพื่อม , กระบวนทัศน์ของโปรแกรมปัญญาประดิษฐ์และ (ถ้าคุณจริงๆไม่ยอมใครง่ายๆ) ให้มากกว่าแลมบ์ดา คุณสามารถผสมและจับคู่หนังสือเหล่านั้นทั้งหมดเพื่อรับภาพรวมกว้าง ๆ ของวิธีการเขียนโปรแกรมเชิงปฏิบัติและแนวคิด

ฉันยังพิจารณาการเรียนรู้ Clojure และ Scala เนื่องจากทั้งสองเป็นภาษาที่ใช้งานได้ดีและมีความหมายมากในภาษาของพวกเขาเอง


6

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

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

แต่เมื่อพูดทั้งหมดนี้ฉันคิดว่ามันมีข้อดีสำหรับ F # - คุณบอกว่าคุณทำสิ่งนี้เป็นสิ่งที่เคียงข้างกัน แต่เมื่อคุณเรียนรู้ FP คุณจะต้องใช้สิ่งที่ดีทั้งหมดในไม่ช้า การใช้ F # หมายความว่าคุณสามารถทำสิ่งต่าง ๆ "ของจริง" ได้มากขึ้นเนื่องจากมันอาจจะง่ายต่อการจัดการกับปัญหาแบบเดียวกันกับที่คุณจัดการกับงานประจำวัน เป็นการดีที่คุณจะไปถึงจุดที่คุณจะเห็นความได้เปรียบของการใช้มากกว่านั้นพูด C # - และใช้มันในบางโครงการ ดังนั้นในขณะที่คุณไม่ได้เลือก F # เท่านั้นเพราะคุณสามารถเข้าถึงได้ง่ายกว่าคุณควรพิจารณาเนื่องจากไม่มีอะไรดีไปกว่าการใช้งานจริงแนวคิดใหม่เหล่านี้ ในทางตรงกันข้ามถ้าคุณใช้ Scheme หรือ Haskell และคิดว่ามันเป็นภาษาของเล่นสำหรับจุดประสงค์ของคุณ (แม้ว่าคุณจะรู้ว่าบางคนใช้มันสำหรับการใช้งานจริง) คุณจะไม่จริงจังกับเรื่อง FP ทั้งหมด [แต่ YMMV ส่วนใหญ่มาจากการสังเกตแบบส่วนตัวและอาจแตกต่างกันอย่างมากจากบุคคลหนึ่งไปอีกคน]


6

มีเหตุผลใดที่ทำให้ ML ไม่ใช่หนึ่งในตัวเลือกของคุณ? มีวัสดุเบื้องต้นจำนวนพอใช้รวมทั้งหนังสือและเอกสารประกอบคำบรรยาย ถ้าคุณชอบ The Little Schemer คุณอาจสนุกไปกับ The Little MLer ในที่สุดคุณสามารถทำการเปลี่ยนเป็น F # ในภายหลังได้อย่างง่ายดาย (ไม่ใช่ว่าฉันเคาะ Haskell หรือ Scheme - เรียนรู้อย่างสมบูรณ์แบบทั้งสาม)

นอกจากนี้ยังมีคำเตือนเกี่ยวกับ Emacs Lisp ฉันไม่คิดว่า Haskell หรือ ML จะเตรียมคุณให้พร้อม ภาษา Lispy เช่น Scheme จะช่วยได้ แต่ก็ยังมีความแตกต่างที่สำคัญเช่น ตัวแปรที่กำหนดขอบเขตแบบไดนามิก ส่วนขยายของ Emacs โดยธรรมชาติแล้วมักจะมีความจำเป็นมากกว่าฟังก์ชั่นการใช้งาน - พวกเขาล้วนเกี่ยวกับการเปลี่ยนแปลงสถานะของบรรณาธิการ


ขอบคุณที่ผลักฉันเข้าหา ML / OCaml และใช่ฉันจะ "เสี่ยงดวงวิญญาณของฉัน" และสำรวจ F # ฉันพัฒนาสำหรับ Linux, Mac OS X และ Windows (ส่วนใหญ่เป็นรุ่นก่อนหน้า) แต่ FSI นั้นมีให้ใช้งานสำหรับทั้งสามแพลตฟอร์ม (ใช้งาน mono บน Linux และ Mac OS X) ซึ่งฉันทำไปแล้ว ความจริงที่ว่าน้ำหนักทั้งหมดของ Microsoft อยู่เบื้องหลังภาษาการเขียนโปรแกรมการทำงาน (แม้ว่าจะเป็น "ไม่บริสุทธิ์" อย่างใดอย่างหนึ่ง) ควรได้รับการต้อนรับมากกว่าแฟน ๆ ของการเขียนโปรแกรมฟังก์ชั่นการทำงาน
haziz

BTW ฉันได้สั่ง The Little MLer จาก Amazon และได้รับแล้วและเริ่มต้นการเดินทางของฉัน ฉันเพิ่งเพิ่ม Learning F # ในห้องสมุดของฉัน ดูเหมือนว่าจะเป็นแนวทางการสอนที่สำคัญกว่านั้นฉันจะใช้เพื่อเสริม The Little MLer ด้วย
haziz

6

เขียนโครงการด้วยตัวคุณเองใน 48 ชั่วโมง (ใน Haskell)

ฉันแนะนำสิ่งนี้จริงๆ คุณจะได้เรียนรู้ Haskell โดยใช้ปัญหาจริงและน่าสนใจและคุณจะได้เรียนรู้บทเรียนที่ดีที่สุดจากการเล่นกับล่ามที่คุณสร้าง หากคุณไปเส้นทางนี้ให้แนะนำ Haskell ดี ๆ คุณจะเข้าใจพวกเขาดีขึ้นหากคุณมีปัญหาในการแก้ไข


จริง ๆ แล้วฉันใช้ wiki / pdf นี้เพื่อเรียนรู้ Haskell และฝึกฝนทักษะ OCaml ของฉัน (โดยการแปล idiomatic Haskell เป็น OCaml) มันจะค่อนข้างเจ๋งถ้ามีคนเอาเนื้อหานี้มาและ "แยก" มันสำหรับภาษาที่ใช้งานได้หลายภาษา อาจเป็นพื้นฐานสำหรับการถ่ายภาพภาษาฟังก์ชั่นที่ยอดเยี่ยม!
Marc

1
ปัญหาหลักของเรื่องนี้คือมันแนะนำพาร์เซกโดยไม่แนะนำพระ
ทางเลือก

@alternative parsec มีส่วนต่อประสาน Monadic แต่ก็ยังมีส่วนต่อประสานที่ใช้งานได้และไม่ต้องพูดถึงฟังก์ชั่นอื่น ๆ อีกมากมาย มันไม่สมเหตุสมผลที่จะแนะนำ Parsec ก่อนการวางหลักเกณฑ์ทั่วไป
Philip JF

4

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


3
"ตรวจสอบรหัสของคุณว่าถูกต้อง" ค่อนข้างผิด ระบบประเภทไม่สามารถทำได้ (เว้นแต่ระบบการพิมพ์ของคุณจะเป็นนักทฤษฎีบทที่แท้จริง)
Eli Barzilay

4
@Eli คุณใช้ Haskell ไหม แม้ว่าในทางทฤษฎีแล้วข้อความนี้เป็นเท็จอย่างเห็นได้ชัด แต่ในทางปฏิบัติฉันคิดว่ามันค่อนข้างถูกต้องอย่างน้อยเมื่อเปรียบเทียบกับภาษาอื่น ๆ ที่ฉันใช้ ที่กล่าวว่าฉันจริง ๆ ไม่เห็นด้วยว่านี่เป็นคุณสมบัติที่ดีสำหรับผู้เริ่มต้น เมื่อฉันเรียนรู้เชือกฉันอยากจะเห็นว่ารหัสของฉันทำอะไรผิดมากกว่าที่จะรวบรวมเสียงโห่ร้องให้ฉันว่ามันผิดและต้องต่อสู้กับมันเมื่อฉันไม่รู้คำศัพท์ที่ใช้กับข้อความผิดพลาด

1
@Eli "สวยมาก" เป็นคำสำคัญที่นี่ ใน Haskell คุณใช้เวลาคิดเกี่ยวกับวิธีการใช้งานมากขึ้น จากนั้นให้คุณพิมพ์เครื่องหมายถูกลงเพื่อให้แน่ใจว่าแผนที่ของคุณการพับ ฯลฯ มีเหตุผล
ทางเลือก

@Eli Barzilay: ระบบประเภทของ Haskell ดูเหมือนว่ามันใกล้เคียงกับการเป็นนักทฤษฎีบท แน่นอนมันสร้างสภาพแวดล้อมที่ผู้พิสูจน์ทฤษฎีบทดูเหมือนจะเป็นเรื่องธรรมดามากกว่าเครื่องมืออื่น ๆ (ไม่ใช่ว่าฉันหมายถึงความสัมพันธ์เชิงสาเหตุ)
greyfade

@luqui - ใช่ฉันใช้มัน ไม่มันยังคงเป็นคำเท็จทั้งในทางปฏิบัติและในทางทฤษฎี นั่นไม่ใช่สิ่งที่เป็นเอกลักษณ์ของ Haskell
Eli Barzilay

1

ฉันคิดว่าการถกเถียงเรื่องภาษาต่าง ๆ เป็นเรื่องง่ายและพลาดประเด็นไป สำหรับคนที่ต้องการเรียนรู้ว่า FP คืออะไรความแตกต่างระหว่าง Ocaml / ML / Scheme / Haskell นั้นไม่สำคัญเท่ากับความสะดวกสบายของคุณกับวัสดุ (หนังสือวิดีโอเครื่องมือ) ที่คุณใช้เพื่อเรียนรู้ และไม่ว่าคุณจะมีเพื่อนหรือเปล่าที่จะช่วยให้คุณเรียนรู้ภาษาที่สำคัญกว่านั้นทุกอย่าง



0

ในหนึ่งในคำตอบที่คุณได้รับจากคำถามของคุณฉันพบว่าลิงก์นี้น่าสนใจทีเดียวเพราะมันให้รสชาติของ Haskell และ Scheme

นอกจากลิงค์ที่ดีนี่คือคำถามของคุณ

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

มีภาษาที่ดีออกมามากมาย คนสกาลาจะยกย่องภาษาของพวกเขาเช่นเดียวกับคน Clojure และ CL แม้แต่ Pythonistas ก็อ้างความเกียจคร้าน คนอื่นที่ตอบคุณแนะนำ ML Amit Rathoreผู้เขียน Clojure in Action อาจแนะนำให้คุณเรียนรู้ Haskell

คุณพูดถึง Windows และ F # สิ่งนั้นจะช่วยคุณในตำแหน่งปัจจุบันของคุณหรือไม่? ฉันไม่รู้อะไรเกี่ยวกับ F # มันใช้งานได้เพียงพอหรือไม่ ฉันถามว่าเนื่องจาก IMHO Python มีโครงสร้างที่ใช้งานได้ แต่ไม่เหมือนกับการเขียนโปรแกรมใน Clojure

เพื่อสรุปให้เรียนรู้ภาษาที่ใช้งานได้จริง ๆ และใช้งานได้ดีในสถานการณ์ของคุณ


-2

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

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