คำถามติดแท็ก haskell

ภาษาโปรแกรมที่ใช้งานได้

2
เหตุใดคณะกรรมการ Haskell จึงเลือกพระเพื่อเป็นตัวแทน I / O
สะอาดภาษาใช้ประเภทเอกลักษณ์ในการจัดการ I / O ในการตั้งค่าการทำงานได้อย่างหมดจด ไม่คณะกรรมการ Haskell ไปกับทำไมmonadsแทน? มีข้อเสนออื่น ๆ สำหรับการจัดการสถานะที่คณะกรรมการตรวจสอบ แต่ตัดสินใจกับ? หมายเหตุ : ฉันไม่ได้มองหาสงครามศักดิ์สิทธิ์ระหว่างพระและคอมพิวเตอร์ในรูปแบบอื่น ๆ มาติดตามเรื่องการเลือกของคณะกรรมการเกี่ยวกับ I / O

12
Scheme vs Haskell สำหรับการแนะนำการเขียนโปรแกรมเชิงฟังก์ชั่น?
ฉันพอใจกับการเขียนโปรแกรมใน C และ C # และจะสำรวจ C ++ ในอนาคต ฉันอาจมีความสนใจในการสำรวจการเขียนโปรแกรมการทำงานเป็นกระบวนทัศน์การเขียนโปรแกรมที่แตกต่างกัน ฉันกำลังทำสิ่งนี้เพื่อความสนุกงานของฉันไม่ได้เกี่ยวข้องกับการเขียนโปรแกรมคอมพิวเตอร์และฉันได้รับแรงบันดาลใจจากการใช้งานการเขียนโปรแกรมการสอนค่อนข้างเร็วในหลักสูตรวิทยาศาสตร์คอมพิวเตอร์ในวิทยาลัย แคลคูลัสแลมบ์ดานั้นเกินความสามารถทางคณิตศาสตร์ของฉันอย่างแน่นอน Haskell หรือ Scheme ใดที่จะทำหน้าที่เป็นบทนำที่ดีในการเขียนโปรแกรมการทำงาน ฉันใช้ emacs เป็นเครื่องมือแก้ไขข้อความและต้องการให้สามารถกำหนดค่าได้ง่ายขึ้นในอนาคตซึ่งจะทำให้เกิดการเรียนรู้ Emacs Lisp อย่างไรก็ตามความเข้าใจของฉันคือ Emacs Lisp นั้นค่อนข้างแตกต่างจาก Scheme และยังเป็นขั้นตอนที่มากกว่าการทำงาน ฉันน่าจะใช้หนังสือ "The Little Schemer" ซึ่งฉันได้ซื้อไปแล้วถ้าฉันติดตาม Scheme (ดูเหมือนว่าฉันจะแปลกเล็กน้อยจากการ จำกัด การอ่านผ่าน) หรือจะใช้ "Learn You a Haskell เพื่อสิ่งดีๆ" ถ้าฉันติดตาม Haskell ฉันจะดูวิดีโอแนะนำ Intro ถึง Haskell โดย Dr …

7
ระบบประเภทของ Haskell เป็นอุปสรรคต่อการทำความเข้าใจการเขียนโปรแกรมที่ใช้งานได้จริงหรือไม่? [ปิด]
ฉันกำลังศึกษา Haskell เพื่อจุดประสงค์ในการทำความเข้าใจเกี่ยวกับการเขียนโปรแกรมฟังก์ชั่นด้วยความคาดหวังว่าฉันจะใช้ความเข้าใจที่ฉันได้รับในภาษาอื่น ๆ (Groovy, Python, JavaScript เป็นหลัก) ฉันเลือกแฮสเค็ลล์เพราะฉันรู้สึกว่ามันใช้งานได้อย่างหมดจดและไม่ยอมพึ่งพารัฐ ฉันไม่ได้เลือกที่จะเรียนรู้ Haskell เพราะฉันสนใจที่จะสำรวจระบบที่เข้มงวดมาก ๆ คำถามของฉันคือสิ่งนี้: ระบบพิมพ์ที่แข็งแกร่งเป็นผลพลอยได้ที่จำเป็นของภาษาที่ใช้งานได้อย่างสมบูรณ์หรือเป็นตัวเลือกการออกแบบที่ไม่เกี่ยวข้องกับ Haskell โดยเฉพาะหรือไม่?

2
การประยุกต์ใช้ความหมายเชิง Denotational กับการออกแบบโปรแกรม
ฉันได้อ่านนิดหน่อยเกี่ยวกับdenotational semantics (DS) และฉันก็รู้สึกทึ่งมากเกี่ยวกับกระบวนการออกแบบโปรแกรมคอมพิวเตอร์ที่ประเภทและฟังก์ชั่นมีการแมปที่แข็งแกร่งและชัดเจนกับคณิตศาสตร์ มีทรัพยากรใดบ้างที่พูดถึงการออกแบบโปรแกรมโดยยึด DS เป็นรายละเอียดหรือไม่? ฉันเคยเห็นการรักษาผิวเผินบางอย่างของเรื่อง ฉันคุ้นเคยกับ Haskell, Scala, Common LISP และ Scheme เล็กน้อยดังนั้นทรัพยากรใด ๆ ที่ใช้ภาษาเหล่านั้นจะได้รับการชื่นชมอย่างมาก
30 scala  haskell  scheme 

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

3
Haskell vs Erlang สำหรับบริการบนเว็บ
ฉันกำลังมองหาที่จะเริ่มต้นโครงการทดลองโดยใช้ภาษาที่ใช้งานได้และพยายามที่จะตัดสินใจว่า Erlang และ Haskell เป็นคนบ้าและทั้งสองมีบางประเด็นที่ฉันชอบ ฉันชอบระบบที่แข็งแกร่งและความบริสุทธิ์ของ Haskell ฉันรู้สึกว่ามันจะง่ายต่อการเขียนรหัสที่เชื่อถือได้จริงๆ และฉันคิดว่าพลังของ Haskell จะทำให้บางสิ่งที่ฉันต้องการทำได้ง่ายขึ้นมาก ในด้านลบฉันได้รับความรู้สึกว่าบางส่วนของ Frameworks สำหรับการทำสิ่งต่างๆบนเว็บใน Haskell เช่น Yesod นั้นไม่ได้ก้าวหน้าไปกว่าชิ้นส่วน Erlang ของพวกเขา ฉันชอบวิธีการของ Erlang สำหรับเธรดและการยอมรับข้อผิดพลาด ฉันรู้สึกว่า scalability ของ Erlang อาจเป็นข้อดีหลัก ๆ ได้ ซึ่งนำไปสู่คำถามของฉันสิ่งที่ผู้คนได้รับจากการใช้แบ็กเอนด์เว็บแอปพลิเคชันใน Haskell และ Erlang มีแพ็คเกจสำหรับ Haskell เพื่อจัดหาเธรดและนักแสดงบางส่วนที่มีอยู่ใน Erlang หรือไม่?

8
ใช้ระบบพิมพ์ที่“ แข็งแกร่ง” ในโลกแห่งความเป็นจริงพูดสำหรับเว็บแอปขนาดใหญ่หรือไม่?
ฉันรู้ว่านี่เป็นคำถามที่กว้างขวางคลุมเครือและเป็นไปได้ทางปรัชญา ในขอบเขตที่คำหลักที่สำคัญที่สุดในคำถาม - "ความเชื่อ" ระบบการพิมพ์ - ตัวเองเป็นป่วยกำหนด ดังนั้นให้ฉันพยายามอธิบายสิ่งที่ฉันหมายถึง บริบทโดยรวมของคำถาม เราได้สร้างเว็บแอปขนาดใหญ่ขึ้นใน Ruby on Rails และโดยทั่วไปเรามีความสุขกับกองซ้อนของเรา เมื่อเราต้องการเราสามารถจัดส่งสิ่งต่าง ๆ ได้อย่างรวดเร็วจริง ๆ - สิ่งที่ใช้งานได้ 90% ของคดี "ธุรกิจ" โดยไม่ต้องกังวลเรื่องขอบคดีมากถึง 10% ในทางกลับกันด้วยความช่วยเหลือในการใช้โค้ดรีวิวและทดสอบครอบคลุมเราจะช้าและพิจารณาและตรวจสอบให้แน่ใจว่าเราครอบคลุมฐานทั้งหมด - อีกครั้งเฉพาะในสถานการณ์ที่สมควรได้รับการตรวจสอบข้อเท็จจริงและความปลอดภัยอย่างใกล้ชิด อย่างไรก็ตามเมื่อทีมเติบโตขึ้นฉันเริ่มรู้สึกไม่สบายใจกับการขาด "ตาข่ายนิรภัย" ที่ถูกอบเข้าไปในกองของเรา เราเพิ่งเริ่มทำการพัฒนา Android พื้นเมืองบน Java และฉันก็นึกถึงความปลอดภัยที่จัดเตรียมโดยภาษาที่รวบรวม / คงที่ / พิมพ์ดีดอย่างยิ่ง ตัวแปรที่สะกดผิดประเภทข้อมูลที่ไม่ถูกต้องการเรียกใช้ฟังก์ชันที่ไม่ถูกต้องและโฮสต์ของข้อผิดพลาดเล็กน้อยที่ IDE ของคุณติดอยู่เอง ทั้งหมดเป็นเพราะ IDE สามารถเชื่อมต่อกับคอมไพเลอร์และตรวจสอบบางแง่มุมของโปรแกรม "ความถูกต้อง" ต้องการเปลี่ยนลายเซ็นฟังก์ชั่นหรือไม่? ง่าย. คอมไพเลอร์ …

3
วิธีต่าง ๆ ในการดู monad
ในขณะที่เรียนรู้ Haskell ฉันได้พบกับบทเรียนมากมายที่พยายามอธิบายสิ่งที่ monads และทำไม monads มีความสำคัญใน Haskell แต่ละคนใช้การเปรียบเทียบดังนั้นการจับความหมายได้ง่ายขึ้น ในตอนท้ายของวันฉันได้จบลงด้วยมุมมองที่แตกต่างกัน 3 แบบว่า monad คืออะไร: ดู 1: Monad เป็นป้ายกำกับ บางครั้งฉันคิดว่า monad เป็นป้ายชื่อประเภทเฉพาะ ตัวอย่างเช่นฟังก์ชั่นของประเภท: myfunction :: IO Int myfunction เป็นฟังก์ชันที่เมื่อใดก็ตามที่มีการดำเนินการมันจะให้ค่า Int ชนิดของผลลัพธ์ไม่ใช่ Int แต่เป็น IO Int ดังนั้น IO จึงเป็นเลเบลของค่า Int เตือนผู้ใช้ให้รู้ว่าค่า Int เป็นผลลัพธ์ของกระบวนการที่ได้ทำการกระทำของ IO ดังนั้นค่า Int นี้จึงถูกทำเครื่องหมายเป็นค่าที่มาจากกระบวนการที่มี IO ดังนั้นค่านี้จึงเป็น "สกปรก" กระบวนการของคุณไม่บริสุทธิ์อีกต่อไป ดู …

4
return-type- (only)-Polymorphism ใน Haskell เป็นสิ่งที่ดีหรือไม่?
สิ่งหนึ่งที่ฉันไม่เคยคิดมาก่อนใน Haskell คือวิธีที่คุณสามารถมีค่าคงที่แบบ polymorphic และฟังก์ชั่นที่ประเภทการคืนค่าไม่สามารถกำหนดได้ตามประเภทอินพุตของพวกเขาเช่น class Foo a where foo::Int -> a บางเหตุผลที่ฉันไม่ชอบสิ่งนี้: ความโปร่งใสอ้างอิง: "ใน Haskell เมื่อได้รับอินพุตเดียวกันฟังก์ชั่นจะส่งคืนเอาต์พุตเดียวกันเสมอ" แต่นั่นเป็นเรื่องจริงหรือ read "3"return 3 เมื่อใช้ในIntบริบท แต่ส่งข้อผิดพลาดเมื่อใช้ใน a, say, (Int,Int)context ใช่คุณสามารถโต้แย้งได้ว่าreadการรับพารามิเตอร์ประเภท แต่ความนัยของพารามิเตอร์ประเภททำให้ความงามของมันหายไปในความคิดของฉัน ข้อ จำกัด monomorphism: หนึ่งในสิ่งที่น่ารำคาญที่สุดเกี่ยวกับ Haskell แก้ไขให้ฉันถ้าฉันผิด แต่เหตุผลทั้งหมดสำหรับ MR คือการคำนวณที่มีลักษณะที่ใช้ร่วมกันอาจไม่ใช่เพราะพารามิเตอร์ type เป็นนัย ประเภทการเริ่มต้น: อีกสิ่งหนึ่งที่น่ารำคาญที่สุดเกี่ยวกับ Haskell เกิดขึ้นเช่นถ้าคุณส่งผลลัพธ์ของฟังก์ชัน polymorphic ในผลลัพธ์ไปยังฟังก์ชัน polymorphic ในอินพุต อีกครั้งแก้ไขให้ฉันถ้าฉันผิด แต่สิ่งนี้จะไม่จำเป็นหากไม่มีฟังก์ชันที่ชนิดของการส่งคืนไม่สามารถกำหนดได้ตามประเภทอินพุต (และค่าคงที่แบบ …

2
อะไรคือความแตกต่างของเนื้อหาระหว่างวิทยานิพนธ์ของคริสโอกาซากิในปี 1996 และหนังสือ 1999, โครงสร้างข้อมูลที่ใช้งานได้อย่างแท้จริง? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการ4 ปีที่แล้ว ฉันต้องการอ่านโครงสร้างข้อมูลที่ทำงานได้อย่างหมดจด ฉันได้พบวิทยานิพนธ์ (ซึ่งสามารถใช้งานได้อย่างอิสระในรูปแบบ PDF)แต่เห็นว่ามีหนังสือเล่มหนึ่งให้ด้วย ดังนั้นฉันอยากรู้ว่าอะไรคือความแตกต่างระหว่างสองสิ่งพิมพ์นี้

2
ทำไม Haskell มี built-in“ if / then / else” แทนที่จะกำหนดเป็นฟังก์ชั่นไลบรารีแบบง่าย ๆ ?
เหตุใด Haskell จึงมี built-in if/then/elseซึ่งขึ้นอยู่กับBoolชนิดแทนที่จะมีฟังก์ชันไลบรารีอย่างง่าย เช่น if :: Bool -> a -> a -> a if True x _ = x if False _ y = y
25 haskell 

5
ภาษาที่ใช้ในการเขียนโปรแกรม“ ให้” ปรากฏขึ้นเป็นครั้งแรก?
ฉันสงสัยเกี่ยวกับต้นกำเนิดของ "การปล่อย" ที่ใช้ใน Lisp, Clojure และ Haskell มีใครรู้บ้างว่าภาษานั้นปรากฏในภาษาใดเป็นอันดับแรก

3
ทำไมบางภาษาที่ใช้งานจำเป็นต้องใช้หน่วยความจำในการทำธุรกรรมซอฟต์แวร์
ภาษาที่ใช้งานได้ตามคำจำกัดความไม่ควรรักษาตัวแปรสถานะ เหตุใด Haskell, Clojure และอื่น ๆ จึงมีการใช้งานซอฟต์แวร์ transactional memory (STM) มีความขัดแย้งระหว่างสองแนวทางหรือไม่?

1
seq ใช้บ่อยแค่ไหนในรหัสการผลิต Haskell
ฉันมีประสบการณ์ในการเขียนเครื่องมือขนาดเล็กใน Haskell และฉันพบว่ามันใช้งานง่ายมากโดยเฉพาะการเขียนตัวกรอง (โดยใช้interact) ที่ประมวลผลอินพุตมาตรฐานและไพพ์ไปยังเอาต์พุตมาตรฐาน เมื่อเร็ว ๆ นี้ฉันพยายามใช้ตัวกรองดังกล่าวกับไฟล์ที่มีขนาดใหญ่กว่าปกติประมาณ 10 เท่าและฉันพบStack space overflowข้อผิดพลาด หลังจากอ่านบางส่วน (เช่นที่นี่และที่นี่ ) ฉันได้ระบุแนวทางสองข้อเพื่อประหยัดพื้นที่สแต็ก (Haskellers ที่มีประสบการณ์โปรดแก้ไขให้ฉันถ้าฉันเขียนสิ่งที่ไม่ถูกต้อง): หลีกเลี่ยงการเรียกฟังก์ชั่นแบบเรียกซ้ำที่ไม่ใช่แบบเรียกซ้ำ (ใช้ได้กับทุกภาษาที่ใช้งานได้ซึ่งรองรับการปรับให้เหมาะสมแบบหางเรียก) แนะนำseqให้บังคับให้มีการประเมินผลก่อนของนิพจน์ย่อยเพื่อให้นิพจน์ไม่ใหญ่เกินไปก่อนที่จะถูกลดขนาดลง (นี่เป็นลักษณะเฉพาะของ Haskell หรืออย่างน้อยก็สำหรับภาษาที่ใช้การประเมินแบบขี้เกียจ) หลังจากแนะนำการseqโทรห้าหรือหกครั้งในรหัสของฉันเครื่องมือของฉันจะทำงานได้อย่างราบรื่นอีกครั้ง (เช่นเดียวกับข้อมูลขนาดใหญ่) อย่างไรก็ตามฉันพบว่ารหัสต้นฉบับอ่านง่ายขึ้นอีกเล็กน้อย เนื่องจากฉันไม่ใช่โปรแกรมเมอร์ Haskell ที่มีประสบการณ์ฉันต้องการถามว่าการแนะนำseqด้วยวิธีนี้เป็นวิธีปฏิบัติทั่วไปหรือไม่และบ่อยครั้งที่บุคคลทั่วไปจะเห็นseqในรหัสการผลิต Haskell หรือมีเทคนิคใดบ้างที่อนุญาตให้หลีกเลี่ยงการใช้seqบ่อยเกินไปและยังคงใช้พื้นที่สแต็กน้อย?

1
การอนุมาน Hindley-Milner สามารถทำงานกับภาษา Go ได้หรือไม่
ฉันอ่านแล้วว่าHindley-Milnerไม่ทำงานกับระบบพิมพ์ที่มีคลาสย่อยและมีคุณสมบัติของระบบประเภทอื่น ๆ ที่ใช้งานไม่ได้กับมัน ไปในขณะนี้มีข้อสรุปประเภท จำกัด มากใน:=ผู้ประกอบการ แต่ Go ไม่ได้มี subclasses ในความหมายดั้งเดิมมีเพียงอินเตอร์เฟสที่มีลักษณะคล้ายกับคลาสของ Haskell ซึ่งทำงานได้ดีกับการอนุมาน Hindley-Milner ดังนั้นการอนุมานของ Hindley-Milner สามารถทำงานได้ในหลักการของ Go แบบเดียวกับ Haskell หรือไม่? หรือไปมีคุณสมบัติอื่น ๆ ที่ทำลายมันได้หรือไม่ (ในทางกลับกัน Haskell ยังมีคุณสมบัติบางอย่างที่ไม่สามารถใช้กับ Hindly-Milner ได้หากคุณใช้สิ่งที่คุณต้องพิมพ์ด้วยตนเองในส่วนของโปรแกรม)

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