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

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

1
ตัวอย่างความเป็นไปได้ของหน่วยความจำทรานแซคชันของซอฟต์แวร์
หนึ่งในข้อได้เปรียบที่สำคัญของหน่วยความจำทรานแซคชันของซอฟต์แวร์ที่ได้รับการกล่าวถึงเสมอคือความสามารถในการประกอบและโมดูล ชิ้นส่วนที่แตกต่างกันสามารถนำมารวมกันเพื่อผลิตส่วนประกอบที่มีขนาดใหญ่ขึ้น ในโปรแกรมล็อคตามนี้มักจะไม่เป็นกรณี ฉันกำลังมองหาตัวอย่างง่ายๆที่แสดงถึงสิ่งนี้ด้วยรหัสจริง ฉันต้องการตัวอย่างใน Clojure แต่ Haskell ก็ดีเหมือนกัน คะแนนโบนัสหากตัวอย่างแสดงรหัสล็อคที่ไม่สามารถเขียนได้ง่าย
11 haskell  clojure  stm 

1
ทำไมตัวสร้างข้อมูลที่มีชื่อเดียวกันไม่อนุญาตในตัวสร้างประเภทอื่น
การประกาศต่อไปนี้ให้ข้อผิดพลาด: type Vec2d = (Float, Float) type Vec3d = (Float, Float, Float) -- Rect x y defines a rectangle spanning from (0,0) to (x,y) data Obj2d = Rect Float Float | Translate Vec2d Obj2d -- Cuboid x y z defines a cuboid spanning from (0,0,0) to (x,y,z) data Obj3d = …
11 haskell 

2
การดูแลรักษารัฐโดยไม่ได้รับมอบหมาย
ฉันกำลังเรียนรู้การเขียนโปรแกรมฟังก์ชั่นและฉันมีปัญหาในการทำความเข้าใจว่าบางสถานการณ์ถูกนำไปใช้โดยไม่ได้รับมอบหมาย ปัญหาง่าย ๆ ดังต่อไปนี้ค่อนข้างจะทำให้ฉันสับสน เขียนโปรแกรมที่รับเหตุการณ์เกี่ยวกับการเปลี่ยนแปลงในโครงสร้างข้อมูลที่กำหนดและส่งเหตุการณ์เมื่อโครงสร้างข้อมูลนี้ถึงสถานะที่แน่นอน ดังนั้นฉันจึงมีสำเนาของโครงสร้างข้อมูลที่ฉันเก็บไว้ datastructure_copy::DataStructure ฉันมีกระแสของเหตุการณ์ที่ถูกไล่ออกเมื่อมีการเปลี่ยนแปลง: datastructure_changes::Stream Change ฉันมีฟังก์ชั่นที่ใช้การเปลี่ยนแปลงกับโครงสร้างข้อมูลและส่งคืนสำเนาใหม่: apply_change::Change -> DataStructure -> DataStructure และฉันมีภาคที่ตรวจสอบว่าสถานะข้อมูลได้ถึงสถานะที่ต้องการ is_ready::DataStructure ->Boolean กล่าวอีกนัยหนึ่งฉันต้องการบางสิ่งเช่น 'ลด' ที่ทำงานบนสตรีม ฉันรู้ว่าวิธีหนึ่งในการดำเนินการนี้คือการคำนวณสถานะใหม่ทุกครั้งที่มีการเปลี่ยนแปลงมาถึงอย่างไรก็ตามสิ่งนี้ดูเหมือนจะไม่จริง ฉันเล่นกับ Monad ของรัฐ แต่ดูเหมือนว่าฉันจะแก้ปัญหาที่แตกต่าง ดังนั้นมีวิธีอื่นในการทำเช่นนั้น? โปรดทราบว่าคำถามของฉันเป็นแนวคิดอย่างหมดจดและฉันไม่คุ้นเคยอย่างลึกซึ้งกับ Haskell

1
จำเป็นที่จะต้องเรียนรู้การขยายภาษา haskell สำหรับการผลิต
ภาษาหลักของ Haskell นั้นเรียบง่ายมาก มาจากพื้นหลังของ OO ปัญหาหลักคือการปรับให้เข้ากับกระบวนทัศน์การทำงานที่บริสุทธิ์ ในขณะที่เรียนรู้ Haskell "พื้นฐาน" ฉันมักจะพิจารณาการขยายภาษาเป็นของเล่นสำหรับคน CS หรือเป็นการทดลองสำหรับภาษาในอนาคต (เช่นfrom future import ???ในภาษาไพ ธ อน) อย่างไรก็ตามเมื่อฉันเริ่มดูเว็บเฟรมเวิร์กเช่น Yesod ฉันพบว่าซอร์สไฟล์จำนวนมากต้องการระหว่างนามสกุล 3 และ 4 บางตัวดูค่อนข้างง่าย (StringOverload) อื่น ๆ ที่น่ากลัวจริงๆ (GADT, ประเภท Famillies, เทมเพลต Haskell) เอกสารประกอบของพวกเขาเชื่อมโยงกับงานวิจัยซึ่งน่ากลัวสำหรับใครบางคนที่คาดหวังว่าจะได้เรียนรู้ "เพียงแค่" ห้องสมุดใหม่ จำเป็นหรือไม่ที่จะต้องเรียนรู้การขยายภาษา GHC ให้มีประสิทธิภาพใน Haskell หากคุณต้องจ้างนักพัฒนา Haskell เพื่อขอใบสมัครผลิตคุณจะขอความรู้เช่นนั้นหรือไม่?
10 haskell 

2
ประเภทใน Lisp และ Scheme
ฉันเห็นแล้วว่าแร็กเก็ตมีประเภท เมื่อดูอย่างรวดเร็วครั้งแรกดูเหมือนว่าเกือบจะเหมือนกับการพิมพ์ Haskell แต่ CLOS ของ Lisp ครอบคลุมพื้นที่ Haskell บางประเภทหรือไม่ การสร้างประเภท Haskell ที่เข้มงวดมากและวัตถุในภาษา OO ใด ๆ ดูเหมือนจะคลุมเครือ เป็นเพียงว่าฉันดื่ม Hool-kool-aid บางอย่างและฉันหวาดระแวงโดยสิ้นเชิงว่าถ้าฉันไปตามถนน Lisp ฉันจะเมาเพราะการพิมพ์แบบไดนามิก

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

5
จะเป็นไรไหมถ้าฉันตัดสินใจเขียน Ruby ทั้งหมดของฉันราวกับว่าเป็น Haskell
ระบุว่า Ruby มีความสามารถในการดำเนินการรายการที่ดีในตัว - ลดแผนที่เลือกรวบรวม ฯลฯ มันมี Procs บล็อกและ Lambdas และมีการสนับสนุนการทำซ้ำที่ดี ( eachครอบครัว) มันจะเป็นการตัดสินใจที่ไม่ดีถ้าฉันพยายาม เขียนข้อมูล Ruby ทั้งหมดของฉันด้วยวิธีการที่บริสุทธิ์ที่สุด โดยเฉพาะอย่างยิ่งสำหรับโค้ดที่มี I / O น้อยหรือไม่มีเลย ฉันได้เรียนรู้ Haskell (เรียกว่าภาษาแฮ็กเกอร์ 'ของจริง') และฉันรักมันเป็นวิธีการทำสิ่งต่าง ๆ - ฉันรัก Ruby แต่คิดว่ามันน่าสนุกกว่าเดิมเมื่อวิญญาณ Haskell ไหลเข้ามา Ruby ยืม / เรียนรู้อะไรมากมายตั้งแต่แรก) ยินดีต้อนรับคำแนะนำที่สร้างสรรค์ ...

2
เหตุใดจึงไม่ จำกัด คลาสย่อยของ Enum ใน Haskell
ดูเหมือนว่าอินสแตนซ์ที่ถูกผูกมัดใด ๆ ควรมีการนำ Enum ไปปฏิบัติอย่างมีสติ ฉันไม่สามารถคิดตัวอย่างแบบส่วนตัวได้แม้ว่าจะมีบางคนที่มากับคนที่ไม่ใช่พยาธิวิทยาฉันก็จะเข้าใจว่าทำไมมันถึงไม่เป็นเช่นนั้น จากการทำ:iสองประเภทของคลาสดูเหมือนว่าข้อยกเว้นเพียงอย่างเดียวในปัจจุบันในไลบรารีมาตรฐานคือสำหรับสิ่งอันดับซึ่งถูกผูกไว้ แต่ไม่ใช่ Enums อย่างไรก็ตาม tuple ที่ถูกผูกไว้ใด ๆ จะต้องนับจำนวนด้วยวิธีการที่มีสติด้วยการเพิ่มองค์ประกอบสุดท้ายจากนั้นล้อมรอบเมื่อมันไปถึง maxBound การเปลี่ยนแปลงนี้อาจเกี่ยวข้องกับการเพิ่มpredBและ / nextBหรือสิ่งที่คล้ายกันเพื่อ จำกัด สำหรับวิธีที่ปลอดภัย / วนรอบเพื่อสำรวจผ่านค่า Enum ในกรณีนี้toEnum 0 :: (...)จะเท่ากับ(toEnum 0, toEnum 0, ...) :: (...)

1
สถาปัตยกรรมคอมพิวเตอร์ไม่ได้ขึ้นอยู่กับอาร์เรย์ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว เอกสารต้นฉบับของ Wadler ใน Monads for Functional Programming (Haskell) เขากล่าว อีกคำถามหนึ่งที่มีประวัติอันยาวนานก็คือมันเป็นที่ต้องการของโปรแกรมพื้นฐานในการอัพเดทอาร์เรย์หรือไม่ เนื่องจากความพยายามอย่างมากในการพัฒนาอัลกอริธึมและสถาปัตยกรรมบนพื้นฐานของอาร์เรย์เราจะหลีกเลี่ยงการอภิปรายนี้และเพียงแค่คิดว่าคำตอบคือใช่ ไม่มีการอ้างอิงหรือคำใบ้สำหรับสถาปัตยกรรมที่เป็นไปได้อื่น ๆ ฉันเคยได้ยินบางสิ่งเกี่ยวกับสถาปัตยกรรมที่เหมาะกับ Lisp ใครช่วยกรุณาแนะนำฉันด้วยคำอธิบายและคำแนะนำเกี่ยวกับที่ไหน / ฉันสามารถเริ่มต้นในหัวข้อนี้ ฉันซาบซึ้งมากที่คุณสามารถอธิบายสถาปัตยกรรมที่แตกต่างกันในเวลาสั้น

2
การอนุมานประเภทใน Golang / Haskell
ฉันอ่านแล้วว่า Go ไม่มีการอนุมานแบบจริงในแง่ที่ภาษาที่ใช้งานได้เช่น ML หรือ Haskell มี แต่ฉันไม่สามารถหาคำเปรียบเทียบที่เข้าใจได้ง่ายของทั้งสองเวอร์ชัน ใครสามารถอธิบายในแง่พื้นฐานว่าการอนุมานใน Go นั้นแตกต่างจากการอนุมานประเภทใน Haskell และข้อดี / ข้อเสียของแต่ละคนอย่างไร

1
คณิตศาสตร์จำเป็นต้องเข้าใจทฤษฎีเบื้องหลังระบบการพิมพ์ของ Haskell หรือไม่?
เมื่อเร็ว ๆ นี้ฉันสนใจ Haskell เป็นอย่างมาก ในขณะที่พยายามที่จะเรียนรู้แนวคิดใหม่ (เช่นคำหลัก forallและST monad ) และระบบการพิมพ์ของ Haskell โดยทั่วไปผมทำงานอย่างต่อเนื่องเข้าสู่แนวคิดจากทฤษฎีหมวดหมู่และแลมบ์ดาแคลคูลัส ดังนั้นฉันสงสัยว่า: สาขาคณิตศาสตร์อื่น ๆ มีความสำคัญต่อความเข้าใจที่แข็งแกร่งของระบบประเภทของ Haskell ฉันสามารถสละการศึกษาคณิตศาสตร์เหล่านี้อย่างจริงจังและให้ความสนใจกับแนวคิดที่เกี่ยวข้องได้หรือไม่? (เช่นปริมาณในแคลคูลัสแลมบ์ดา) ถ้าเป็นเช่นนั้นแนวคิดใดที่จำเป็น? ฉันหวังว่าจะได้รับประเภทและภาษาการเขียนโปรแกรมในเร็ว ๆ นี้โปรดแนะนำแหล่งข้อมูลการอ่านอื่น ๆ ที่คุณรู้สึกว่าเหมาะสม

2
ที่เก็บข้อมูลในหน่วยความจำใน Haskell
ฉันต้องการติดตั้งที่เก็บข้อมูลในหน่วยความจำสำหรับบริการบนเว็บใน Haskell ฉันต้องการเรียกใช้ธุรกรรมในSTMmonad เมื่อฉัน google hash table steam Haskellฉันได้รับสิ่งนี้เท่านั้น: Data. BTree. HashTable. STM.ชื่อโมดูลและความซับซ้อนแนะนำให้ใช้สิ่งนี้เป็นทรี ฉันคิดว่าอาร์เรย์ควรมีประสิทธิภาพมากกว่าสำหรับตารางแฮชที่ไม่แน่นอน มีเหตุผลที่จะหลีกเลี่ยงการใช้อาร์เรย์สำหรับSTMhashtable หรือไม่? ฉันจะได้รับอะไรกับตารางแฮชไอน้ำนี้หรือฉันควรใช้เพียงเตะอบไอน้ำไปยังIntMap?

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

2
Haskell / Clojure จริง ๆ แล้วไม่เหมาะสำหรับระบบไดนามิกเช่นการจำลองอนุภาค?
ฉันได้รับการบอกในคำถามก่อนหน้านี้ว่าภาษาโปรแกรมที่ใช้งานได้ไม่เหมาะสมสำหรับระบบแบบไดนามิกเช่นเอนจิ้นฟิสิกส์ส่วนใหญ่เป็นเพราะมันมีราคาแพงในการกลายพันธุ์วัตถุ ข้อความนี้มีความสมจริงเพียงใดและทำไม

2
ใครเป็นคนแรกที่ประกาศเกียรติคุณฟังก์ชันคำสั่งซื้อที่สูงขึ้นและ / หรือพลเมืองชั้นหนึ่ง?
ฉันเข้าใจมานานแล้วว่าก่อนที่ Haskell, O'Caml หรือ LISP หน้าที่การสั่งงานที่สูงขึ้นจะเป็นวิชาวิจัยทางวิชาการและในวิชาคณิตศาสตร์Schönfinkel (ในปี 1967) และ Haskell Curry (ในปี 1968) ได้ใช้เทคนิคเช่น currying แต่ ก่อนหน้านี้มีให้ในภาษาการเขียนโปรแกรมใด ๆ Scheme ตาม Wikipediaเป็นภาษาแรกที่แนะนำฟังก์ชั่นการสั่งซื้อที่สูงขึ้นอย่างเหมาะสมในฐานะพลเมืองชั้นหนึ่ง แต่มีใครบ้างที่เราสามารถให้ความคิดดั้งเดิมได้ บางทีโบสถ์อลองโซผู้คิดค้นแลมบ์ดาแคลคูลัสในทศวรรษ 1930? โดยเฉพาะอย่างยิ่งใครเป็นผู้นิยามคำนิยามต่อไปนี้ซึ่งฉันเห็นในการถอดความหลายเรื่องในหนังสือหลายเล่มและแหล่งข้อมูลออนไลน์ ฟังก์ชั่นจะถือว่าเป็นลำดับที่สูงขึ้นเมื่อใช้ฟังก์ชันอื่นเป็นอาร์กิวเมนต์หรือเมื่อส่งคืนฟังก์ชัน ฟังก์ชันใด ๆ ที่ไม่รับฟังก์ชั่นเป็นอาร์กิวเมนต์หรือเป็นชนิดส่งคืนจะเรียกว่าฟังก์ชันลำดับแรก

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