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

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

6
อะไรทำให้ระบบประเภท Haskell ได้รับการเคารพนับถืออย่างมาก (vs say, Java)
ฉันเริ่มที่จะเรียนรู้Haskell ฉันยังใหม่กับมันมากและฉันเพิ่งอ่านหนังสือออนไลน์สองสามเล่มเพื่อให้เข้าใจถึงโครงสร้างพื้นฐานของหนังสือเล่มนี้ หนึ่งใน 'มส์' ที่คนคุ้นเคยกับมันมักจะพูดถึงคือ "ถ้ามันรวบรวมมันจะทำงาน *" - ซึ่งฉันคิดว่าเกี่ยวข้องกับความแข็งแกร่งของระบบประเภท ฉันพยายามที่จะเข้าใจว่าทำไมตรง Haskell จะดีกว่าภาษาพิมพ์แบบคงที่อื่น ๆ ในเรื่องนี้ วางวิธีอื่นผมถือว่าใน Java คุณสามารถทำสิ่งชั่วร้ายเช่นฝังศพ จะมีอะไรบางอย่างที่มันควรจะเป็นArrayList<String>() ArrayList<Animal>()สิ่งที่ชั่วร้ายนี่คือสิ่งที่คุณstringมีelephant, giraffeฯลฯ และถ้ามีคนใส่เข้าไปMercedes- คอมไพเลอร์ของคุณจะไม่ช่วยคุณ ถ้าผมไม่ได้ทำArrayList<Animal>()แล้วในบางจุดในเวลาต่อมาถ้าผมตัดสินใจที่โปรแกรมของฉันไม่ได้จริงๆเกี่ยวกับสัตว์มันเป็นเรื่องของยานพาหนะแล้วฉันสามารถเปลี่ยนการพูด, ฟังก์ชั่นที่ผลิตArrayList<Animal>ในการผลิตArrayList<Vehicle>และ IDE ของฉันควรจะบอกฉันทุกที่มี เป็นการพักสะสม ข้อสันนิษฐานของฉันคือว่านี่คือสิ่งที่ผู้คนหมายถึงโดยระบบพิมพ์ที่แข็งแกร่งแต่ไม่ชัดเจนสำหรับฉันว่าทำไม Haskell ถึงดีกว่า อีกวิธีหนึ่งคุณสามารถเขียน Java ที่ดีหรือไม่ดีฉันคิดว่าคุณสามารถทำได้เหมือนกันใน Haskell (เช่นสิ่งต่าง ๆ เป็นสตริง / ints ที่ควรเป็นประเภทข้อมูลชั้นหนึ่ง) ฉันสงสัยว่าตัวเองขาดอะไร / สำคัญไป ฉันมีความสุขมากที่ได้เห็นข้อผิดพลาดในวิธีการของฉัน!

2
รูปแบบ“ Free Monad + Interpreter” คืออะไร
ฉันเคยเห็นคนที่พูดถึงFree Monad กับ Interpreterโดยเฉพาะอย่างยิ่งในบริบทของการเข้าถึงข้อมูล รูปแบบนี้คืออะไร? ฉันควรใช้เมื่อใด มันทำงานอย่างไรและฉันจะใช้มันอย่างไร ฉันเข้าใจ (จากโพสต์เช่นนี้ ) ว่ามันเกี่ยวกับการแยกแบบจำลองจากการเข้าถึงข้อมูล มันแตกต่างจากรูปแบบพื้นที่เก็บข้อมูลที่รู้จักกันดีอย่างไร ดูเหมือนว่าพวกเขาจะมีแรงจูงใจที่เหมือนกัน

4
ระบบประเภท Haskell เป็นทางการเทียบเท่ากับ Java หรือไม่? [ปิด]
ฉันรู้ว่าบางสิ่งนั้นง่ายกว่า / ยากกว่าในหนึ่งภาษา แต่ฉันสนใจเฉพาะคุณลักษณะที่เกี่ยวข้องกับประเภทที่เป็นไปได้ในที่เดียวและเป็นไปไม่ได้ / ไม่เกี่ยวข้องในอีกภาษาหนึ่ง เพื่อให้มีความเฉพาะเจาะจงมากขึ้นเราจะไม่สนใจส่วนขยายประเภท Haskell เนื่องจากมีหลายสิ่งที่ทำอยู่ที่บ้า / เจ๋ง ๆ

4
วัตถุประสงค์ของลูกศรคืออะไร?
ฉันกำลังเรียนรู้การเขียนโปรแกรม functionnal กับ Haskell และฉันพยายามคว้าแนวคิดโดยการทำความเข้าใจก่อนว่าทำไมฉันถึงต้องการมัน ฉันต้องการทราบเป้าหมายของลูกศรในภาษาโปรแกรมที่ใช้งานได้ พวกเขาแก้ปัญหาอะไร ฉันจะตรวจสอบhttp://en.wikibooks.org/wiki/Haskell/Understanding_arrowsและhttp://www.cse.chalmers.se/~rjmh/afp-arrows.pdf ทั้งหมดที่ฉันเข้าใจคือพวกเขาใช้เพื่ออธิบายกราฟสำหรับการคำนวณและพวกเขาอนุญาตให้เขียนโค้ดในรูปแบบจุดฟรีได้ง่ายขึ้น บทความสมมติว่าสไตล์ฟรีพอยต์นั้นโดยทั่วไปง่ายต่อการเข้าใจและเขียน ดูเหมือนว่าฉันจะคิดแบบนี้ ในบทความอื่น ( http://en.wikibooks.org/wiki/Haskell/StephensArrowTutorial#Hangman:_Main_program ) มีการนำเกมแฮงก์แมนมาใช้ แต่ฉันไม่เห็นว่าลูกศรทำให้การติดตั้งนี้เป็นธรรมชาติอย่างไร ฉันสามารถหาเอกสารจำนวนมากที่อธิบายแนวคิด แต่ไม่มีอะไรเกี่ยวกับแรงจูงใจ ฉันกำลังคิดถึงอะไร

7
คุณเข้ารหัสชนิดข้อมูลพีชคณิตในภาษา C # - หรือภาษา Java ได้อย่างไร
มีปัญหาบางอย่างที่แก้ไขได้อย่างง่ายดายโดย Algebraic Data Types เช่น List type สามารถแสดงออกได้อย่างชัดเจนว่า: data ConsList a = Empty | ConsCell a (ConsList a) consmap f Empty = Empty consmap f (ConsCell a b) = ConsCell (f a) (consmap f b) l = ConsCell 1 (ConsCell 2 (ConsCell 3 Empty)) consmap (+1) l ตัวอย่างเฉพาะนี้อยู่ใน Haskell แต่มันจะคล้ายกันในภาษาอื่นที่มีการสนับสนุนเนทิฟสำหรับประเภทข้อมูลพีชคณิต …

1
คุณออกแบบโปรแกรมใน Haskell หรือภาษาโปรแกรมภาษาอื่น ๆ
ฉันมีประสบการณ์ในการเขียนโปรแกรมเชิงวัตถุเช่น c # หรือ ruby ฉันรู้วิธีออกแบบโปรแกรมในลักษณะเชิงวัตถุวิธีสร้างคลาสและวัตถุและวิธีกำหนดความสัมพันธ์ระหว่างพวกเขา ฉันรู้รูปแบบการออกแบบด้วย คนเขียนโปรแกรมที่ใช้งานได้อย่างไร พวกเขาจะเริ่มอย่างไร มีรูปแบบการออกแบบสำหรับภาษาที่ใช้งานได้หรือไม่? วิธีการเช่นการเขียนโปรแกรมที่รุนแรงหรือการพัฒนาที่คล่องตัวสามารถใช้กับภาษาที่ใช้งานได้หรือไม่?

5
มีข้อเสียหรือปัญหาเกี่ยวกับ Haskell หรือไม่?
ฉันกำลังดูการดำน้ำใน Haskell สำหรับโครงการส่วนตัวของฉันต่อไป เหตุผลที่ฉันจัดการกับ Haskell คือ: ทำให้หัวของฉันเป็นภาษาที่ใช้งานได้อย่างหมดจด ความเร็ว. ในขณะที่ฉันแน่ใจว่าสิ่งนี้สามารถโต้เถียงได้ทำโปรไฟล์ว่าฉันเห็นเล็บ Haskell ใกล้กับ C ++ (และดูเหมือนว่าจะเร็วกว่า Erlang เล็กน้อย) ความเร็ว. วิปริตเว็บเซิร์ฟเวอร์น่าจะเป็นไปอย่างรวดเร็วบ้าในการเปรียบเทียบกับแทบทุกอย่างอื่น สิ่งที่ฉันกำลังมองหาคือข้อเสียหรือปัญหาที่มาพร้อมกับ Haskell เว็บมีข้อมูลจำนวนมหาศาลเกี่ยวกับสาเหตุที่ Haskell เป็นสิ่งที่ดี แต่ฉันไม่ได้พบหัวข้อมากมายเกี่ยวกับด้านที่น่าเกลียดของมัน (นอกเหนือจากการเกี่ยวกับไวยากรณ์ที่ฉันไม่สนใจเลย) ตัวอย่างของสิ่งที่ฉันกำลังมองหาอาจเป็น PILON ของ GIL บางสิ่งที่ไม่ได้อยู่ในหัวจนฉันเริ่มมองเห็นการใช้งานพร้อมกันในสภาพแวดล้อม CPython
47 haskell 

5
คำวิจารณ์ของ IO monad ที่ถูกมองว่าเป็น monad state ที่ปฏิบัติงานบนโลกนี้
IOmonad ใน Haskell มักจะมีการอธิบายเป็น monad รัฐที่รัฐเป็นโลก ดังนั้นค่าของชนิดIO amonad worldState -> (a, worldState)ถูกมองว่าเป็นสิ่งที่ชอบ ก่อนหน้านี้ฉันอ่านบทความ (หรือโพสต์รายการบล็อก / จดหมายข่าว) ที่วิจารณ์มุมมองนี้และให้เหตุผลหลายประการว่าทำไมมันไม่ถูกต้อง แต่ฉันจำไม่ได้ว่าทั้งบทความและเหตุผล มีใครรู้บ้าง แก้ไข:บทความดูเหมือนจะหายไปดังนั้นเริ่มรวบรวมข้อโต้แย้งต่าง ๆ ที่นี่ ฉันเริ่มที่จะทำให้สิ่งต่าง ๆ น่าสนใจยิ่งขึ้น แก้ไข:บทความที่ฉันกำลังมองหาคือการจัดการกับทีมที่น่าอึดอัดใจ: อินพุต / เอาท์พุต monadic, การทำงานพร้อมกัน, ข้อยกเว้นและการโทรภาษาต่างประเทศใน Haskellโดย Simon Peyton Jones (ขอบคุณคำตอบของ TacTics)

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

3
ข้อดีของการใช้ LISP และ Haskell คืออะไร พวกเขาจะทำให้ฉันเป็นโปรแกรมเมอร์ที่ดีขึ้นหรือไม่ [ปิด]
ฉันรู้ว่า Lisp และ Haskell เป็นภาษาตรรกะและการเขียนโปรแกรมตามหน้าที่ แต่สิ่งนี้หมายความว่าอย่างไร พวกเขาแตกต่างจากภาษาอื่น ๆ อย่างไร? ฉันได้ยินมาว่าการเรียนรู้สิ่งเหล่านี้จะทำให้คุณเป็นโปรแกรมเมอร์ที่ดีขึ้นและพัฒนาตรรกะของคุณ นี่คือความจริงและถ้าฉันไปเรียนรู้ Lisp หรือ Haskell ในระดับที่มีความสามารถการเขียนโปรแกรมของฉันจะปรับปรุงและฉันจะดีกว่าที่จะจัดการกับปัญหาใด ๆ ในภาษาใด ๆ ? ฉันแค่อยากรู้ว่าพวกเขาคุ้มค่ากับความพยายามในการเรียนรู้หรือไม่ ภาษาเหล่านี้มีประโยชน์ในด้านต่าง ๆ เช่น GUI และกราฟิกหรือเป็นเพียงแค่มีประโยชน์สำหรับแอปพลิเคชันคอนโซลหรือไม่
40 haskell  lisp 

7
Haskell AND Lisp vs. Haskell หรือ Lisp [ปิด]
ปัจจุบันฉันใช้รหัสกับ C, C ++ และ Python ฉันต้องการรับภาษาโปรแกรมที่ใช้งานได้และตอนนี้ฉันกำลังโน้มตัวไปหา Haskell ฉันไม่ต้องการเริ่มสงคราม "Haskell vs Lisp" ที่นี่; สิ่งที่ฉันต้องการรู้คือ: ถ้าฉันเรียนรู้ Haskell เป็นหลักสำหรับการเปิดรับฟังก์ชั่นการเขียนโปรแกรมฉันจะได้ประโยชน์อะไรจากการเรียนรู้ Lisp ในภายหลัง

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

2
ภาษาสมัยใหม่ยังใช้เครื่องแยกวิเคราะห์หรือไม่?
ฉันกำลังค้นคว้าเกี่ยวกับชุดคอมไพเลอร์ gcc ในวิกิพีเดียที่นี่เมื่อสิ่งนี้เกิดขึ้น: GCC เริ่มต้นใช้ตัวแยกวิเคราะห์ LALR ที่สร้างด้วย Bison แต่ค่อย ๆ เปลี่ยนเป็นตัวแยกวิเคราะห์แบบสืบเชื้อสายแบบเขียนด้วยมือซ้ำ; สำหรับ C ++ ในปี 2004 และสำหรับ C และ Objective-C ในปี 2549 ปัจจุบันส่วนหน้าทั้งหมดใช้ตัวแยกวิเคราะห์ที่เขียนด้วยมือแบบเรียกซ้ำ ดังนั้นด้วยประโยคสุดท้ายนั้น (และสำหรับที่ฉันไว้ใจ wikipedia) ฉันสามารถพูดได้อย่างแน่นอนว่า "C (gcc), C ++ (g ++), Objective-C, Objective-C ++, Fortran (gfortran), Java (gcj), Ada (GNAT), Go (gccgo), Pascal (gpc), ... Mercury, Modula-2, Modula-3, …

5
“ หลักฐานคือโปรแกรม สูตรที่พิสูจน์เป็นประเภทของโปรแกรม”
นี่อาจเป็นคำถามเชิงปรัชญา แต่ฉันเชื่อว่ามีคำตอบที่ตรงตามวัตถุประสงค์ หากคุณอ่านบทความวิกิพีเดียเกี่ยวกับ Haskell คุณสามารถค้นหาสิ่งต่อไปนี้: ภาษามีรากฐานมาจากการสังเกตของ Haskell Curry และทายาททางปัญญาของเขาว่า "การพิสูจน์คือโปรแกรม; สูตรที่พิสูจน์เป็นสูตรสำหรับโปรแกรม" ตอนนี้สิ่งที่ฉันถามคือ: มันใช้ไม่ได้กับภาษาการเขียนโปรแกรมทั้งหมดหรือไม่ ฟีเจอร์ (หรือชุดของฟีเจอร์) ของ Haskell ทำให้มันสอดคล้องกับคำสั่งนี้หรือไม่? กล่าวอีกนัยหนึ่งอะไรคือวิธีที่เห็นได้ชัดเจนซึ่งคำสั่งนี้มีผลต่อการออกแบบภาษา?
37 haskell 

7
อะไรคือสิ่งที่เทียบเท่าการทำงานของคำสั่งทำลายความจำเป็นและการตรวจสอบวงอื่น ๆ ?
สมมติว่าฉันเป็นตรรกะด้านล่าง วิธีการเขียนในฟังก์ชั่นการเขียนโปรแกรม? public int doSomeCalc(int[] array) { int answer = 0; if(array!=null) { for(int e: array) { answer += e; if(answer == 10) break; if(answer == 150) answer += 100; } } return answer; } ตัวอย่างในบล็อกบทความส่วนใหญ่ ... ฉันเห็นเพียงแค่อธิบายกรณีง่าย ๆ ของฟังก์ชันทางคณิตศาสตร์ตรงไปข้างหน้าหนึ่งคำว่า 'ผลรวม' แต่ฉันมีเหตุผลคล้ายกับที่เขียนไว้ข้างต้นใน Java และต้องการย้ายที่ไปยังรหัสการทำงานใน Clojure หากเราไม่สามารถทำตามข้างต้นใน FP ดังนั้นการส่งเสริมการขายประเภท FP ไม่ได้ระบุไว้อย่างชัดเจน …

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