คำถามติดแท็ก algebraic-data-types

7
การใช้พีชคณิตประเภทข้อมูลเชิงพีชคณิตในทางที่ผิด - ทำไมจึงใช้งานได้?
นิพจน์ 'พีชคณิต' สำหรับชนิดข้อมูลเชิงพีชคณิตนั้นมีความหมายมากสำหรับคนที่มีพื้นฐานด้านคณิตศาสตร์ ให้ฉันพยายามอธิบายสิ่งที่ฉันหมายถึง มีการกำหนดประเภทพื้นฐาน สินค้า • สหภาพ + ซิงเกิล X หน่วย 1 และการใช้ชวเลขX²สำหรับX•Xและ2XสำหรับX+Xฯลฯ เราก็สามารถกำหนดนิพจน์พีชคณิตสำหรับเช่นรายการเชื่อมโยง data List a = Nil | Cons a (List a) ↔ L = 1 + X • L และต้นไม้ไบนารี: data Tree a = Nil | Branch a (Tree a) (Tree a) ↔ T = 1 …

8
คุณแสดงกราฟใน Haskell ได้อย่างไร?
ง่ายพอที่จะแสดงต้นไม้หรือรายการใน haskell โดยใช้ประเภทข้อมูลเกี่ยวกับพีชคณิต แต่คุณจะใช้กราฟแทนกราฟได้อย่างไร? ดูเหมือนว่าคุณต้องมีพอยน์เตอร์ ฉันเดาว่าคุณอาจมีบางอย่างเช่น type Nodetag = String type Neighbours = [Nodetag] data Node a = Node a Nodetag Neighbours และนั่นจะสามารถใช้งานได้ อย่างไรก็ตามมันรู้สึกแยกออกเล็กน้อย การเชื่อมโยงระหว่างโหนดต่างๆในโครงสร้างไม่ได้ "ให้ความรู้สึก" มั่นคงเท่ากับการเชื่อมโยงระหว่างองค์ประกอบก่อนหน้าและถัดไปในปัจจุบันในรายการหรือพ่อแม่และลูกของโหนดในทรี ฉันมีลางสังหรณ์ว่าการปรับเปลี่ยนพีชคณิตบนกราฟตามที่ฉันกำหนดไว้มันจะถูกขัดขวางอยู่บ้างจากระดับของทิศทางที่แนะนำผ่านระบบแท็ก โดยหลักแล้วมันคือความรู้สึกสงสัยและการรับรู้ถึงความไม่สมดุลที่ทำให้ฉันถามคำถามนี้ มีวิธีการกำหนดกราฟใน Haskell ที่ดีกว่า / สวยงามกว่าทางคณิตศาสตร์หรือไม่? หรือฉันสะดุดกับบางสิ่งบางอย่างที่ยาก / พื้นฐานโดยเนื้อแท้? โครงสร้างข้อมูลแบบเรียกซ้ำนั้นดูดี แต่ดูเหมือนจะเป็นอย่างอื่น โครงสร้างข้อมูลอ้างอิงตนเองในความหมายที่แตกต่างกันว่าต้นไม้และรายการอ้างอิงตนเองอย่างไร เช่นเดียวกับรายการและต้นไม้เป็นข้อมูลอ้างอิงตัวเองในระดับประเภท แต่กราฟจะอ้างอิงตัวเองในระดับค่า แล้วเกิดอะไรขึ้น?

2
รอยเท้าหน่วยความจำของชนิดข้อมูล Haskell
ฉันจะหาจำนวนหน่วยความจำจริงที่ต้องใช้ในการจัดเก็บค่าของข้อมูลบางประเภทใน Haskell (ส่วนใหญ่เป็น GHC) ได้อย่างไร เป็นไปได้ไหมที่จะประเมินที่รันไทม์ (เช่นใน GHCi) หรือสามารถประเมินความต้องการหน่วยความจำของชนิดข้อมูลผสมจากส่วนประกอบได้หรือไม่ โดยทั่วไปหากทราบข้อกำหนดของหน่วยความจำประเภทaและbค่าใช้จ่ายของหน่วยความจำประเภทข้อมูลพีชคณิตเช่น: data Uno = Uno a data Due = Due a b ตัวอย่างเช่นค่าเหล่านี้ใช้หน่วยความจำกี่ไบต์? 1 :: Int8 1 :: Integer 2^100 :: Integer \x -> x + 1 (1 :: Int8, 2 :: Int8) [1] :: [Int8] Just (1 :: Int8) Nothing …

3
ฉันจะทำให้ฟังก์ชัน Haskell ของฉันสั้นที่สุดเท่าที่จะทำได้ได้อย่างไร
seasonฟังก์ชั่นการใช้ฟังก์ชั่นพีชคณิต แต่ฉันรู้สึกเหมือนรหัสซ้ำ ฉันจะทำให้มันสั้นที่สุดได้อย่างไร data Month = Jan | Feb | Mar | Apr | May | June | July | Aug | Sept| Oct | Nov | Dec deriving (Eq,Ord,Show,Read) data Seasons = Spring | Summer | Autumn | Winter deriving (Eq,Ord,Show,Read) season :: Month -> Seasons season Jan = …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.