ในฐานะภาษาโปรแกรมแรกของฉันฉันจึงตัดสินใจเรียน Haskell ฉันเป็นวิชาเอกปรัชญาการวิเคราะห์และ Haskell อนุญาตให้ฉันสร้างโปรแกรมที่น่าสนใจได้อย่างรวดเร็วและถูกต้องตัวอย่างเช่นทรานสดิวเซอร์สำหรับการแยกวิเคราะห์ภาษาธรรมชาติผู้พิสูจน์ทฤษฎีบทและล่าม แม้ว่าฉันจะเขียนโปรแกรมเพียงสองเดือนครึ่ง แต่ฉันพบว่าความหมายและไวยากรณ์ของ Haskell เรียนรู้ได้ง่ายกว่าภาษาที่จำเป็นแบบเดิม ๆ มากและรู้สึกสบายใจ (ตอนนี้) กับโครงสร้างส่วนใหญ่
อย่างไรก็ตามการเขียนโปรแกรมใน Haskell เป็นเหมือนเวทมนตร์และฉันต้องการเพิ่มพูนความรู้เกี่ยวกับการเขียนโปรแกรม ฉันต้องการเลือกภาษาการเขียนโปรแกรมใหม่เพื่อเรียนรู้ แต่ฉันไม่มีเวลามากพอที่จะเลือกภาษาใดภาษาหนึ่งวางและทำซ้ำ ดังนั้นฉันคิดว่าฉันจะตั้งคำถามที่นี่พร้อมกับข้อกำหนดหลายประการเกี่ยวกับประเภทของภาษาที่ฉันกำลังมองหา บางคนเป็นเรื่องส่วนตัวบางคนมีจุดมุ่งหมายเพื่อลดการเปลี่ยนจาก Haskell
- ระบบชนิดที่แข็งแกร่ง ส่วนหนึ่งที่ฉันชอบที่สุดในการเขียนโปรแกรมใน Haskell คือการเขียนประกาศประเภท สิ่งนี้ช่วยจัดโครงสร้างความคิดของฉันเกี่ยวกับฟังก์ชันส่วนบุคคลและความสัมพันธ์กับโปรแกรมโดยรวม นอกจากนี้ยังทำให้การให้เหตุผลอย่างไม่เป็นทางการเกี่ยวกับความถูกต้องของโปรแกรมของฉันง่ายขึ้น ฉันกังวลกับความถูกต้องไม่ใช่ประสิทธิภาพ
- เน้นการเรียกซ้ำมากกว่าการวนซ้ำ ฉันใช้โครงสร้างแบบวนซ้ำใน Haskell แต่ใช้แบบวนซ้ำ อย่างไรก็ตามการทำความเข้าใจโครงสร้างของฟังก์ชันวนซ้ำนั้นง่ายกว่าขั้นตอนการวนซ้ำที่ซับซ้อนโดยเฉพาะเมื่อใช้ตัวรวมและฟังก์ชันลำดับที่สูงกว่าเช่นแผนที่การพับและการผูก
- ให้รางวัลกับการเรียนรู้ Haskell เป็นภาษาที่คุ้มค่าในการทำงานมันเหมือนกับการอ่าน Kant ประสบการณ์ของฉันเมื่อหลายปีก่อนกับ C ไม่เป็นเช่นนั้น ฉันไม่ได้มองหาภาษา C ภาษาควรบังคับใช้กระบวนทัศน์ที่น่าสนใจซึ่งในความเห็นส่วนตัวของฉัน C-likes ไม่ชอบ
การชั่งน้ำหนักคำตอบ : แน่นอนว่านี่เป็นเพียงบันทึกย่อ ฉันแค่อยากจะตอบกลับทุกคนที่ให้การตอบกลับในรูปแบบที่ดี คุณได้รับประโยชน์มาก
1) คำตอบหลาย ๆ คำตอบระบุว่าภาษาที่พิมพ์แน่นและคงที่ซึ่งเน้นการเรียกซ้ำหมายถึงภาษาที่ใช้งานได้อื่น ในขณะที่ฉันต้องการทำงานอย่างเข้มแข็งกับ Haskell ต่อไป แต่ camccann และ larsmans ก็ชี้ให้เห็นอย่างถูกต้องว่าภาษาอื่นจะ "ทำให้การเปลี่ยนแปลงง่ายขึ้นมากเกินไป" ความคิดเห็นเหล่านี้มีประโยชน์มากเพราะฉันไม่อยากเขียน Haskell ใน Caml! จากผู้ช่วยพิสูจน์ Coq และ Agda ต่างก็ดูน่าสนใจ โดยเฉพาะอย่างยิ่ง Coq จะให้คำแนะนำที่ชัดเจนเกี่ยวกับตรรกะเชิงสร้างสรรค์และทฤษฎีประเภททางการ ฉันใช้เวลาเล็กน้อยกับเพรดิเคตและลอจิกกิริยาลำดับแรก (Mendellsohn, Enderton, Hinman บางส่วน) ดังนั้นฉันอาจจะสนุกกับ Coq มาก
2) คนอื่น ๆ ชื่นชอบ Lisp (Common Lisp, Scheme และ Clojure) จากสิ่งที่ฉันรวบรวมทั้ง Common Lisp และ Scheme มีเนื้อหาแนะนำที่ยอดเยี่ยม ( On LispและThe Reasoned Schemer , SICP ) เนื้อหาในSICPทำให้ฉันเอนเอียงไปที่ Scheme โดยเฉพาะอย่างยิ่งโครงการผ่านSICPจะครอบคลุมกลยุทธ์การประเมินผลที่แตกต่างกันการดำเนินการตามความเกียจคร้านและโอกาสที่จะมุ่งเน้นไปที่หัวข้อต่างๆเช่นความต่อเนื่องล่ามการคำนวณเชิงสัญลักษณ์และอื่น ๆ ในที่สุดตามที่คนอื่น ๆ ชี้ให้เห็นการรักษารหัส / ข้อมูลของ Lisp จะเป็นเรื่องใหม่ทั้งหมด ดังนั้นฉันจึงเอนเอียงไปที่ตัวเลือก (2) เสียงกระเพื่อม
3) ประการที่สาม Prolog Prolog มีเนื้อหาที่น่าสนใจมากมายและโดเมนหลักก็คือสิ่งที่ฉันสนใจมันมีไวยากรณ์ที่เรียบง่ายและอ่านง่าย ฉันไม่สามารถแสดงความคิดเห็นเพิ่มเติมได้ในขณะนี้ แต่หลังจากอ่านภาพรวมของ Prolog และอ่านเนื้อหาเบื้องต้นบางส่วนแล้วจะมีอันดับ (2) และดูเหมือนว่าการย้อนรอยของ Prolog จะถูกแฮ็กเข้าสู่ Haskell อยู่เสมอ!
4) ในภาษาหลัก Python ดูน่าสนใจที่สุด Tim Yates ทำให้ภาษาฟังดูน่าสนใจมาก เห็นได้ชัดว่า Python มักจะสอนวิชาเอก CS ปีแรก ดังนั้นจึงมีแนวคิดที่สมบูรณ์หรือง่ายต่อการเรียนรู้ ฉันต้องค้นคว้าเพิ่มเติม
ขอบคุณทุกคนสำหรับคำแนะนำ! ดูเหมือนว่า Lisp (Scheme, Clojure), Prolog หรือผู้ช่วยพิสูจน์เช่น Coq หรือ Agda จะเป็นภาษาหลักที่แนะนำ