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

Haskell เป็นภาษาโปรแกรมที่ใช้งานได้มีการพิมพ์แบบสแตติกการประเมินแบบสันหลังยาวการขนานอย่างกว้างขวางและการสนับสนุนการทำงานพร้อมกัน

7
องค์ประกอบของฟังก์ชัน Haskell (.) และฟังก์ชันของแอปพลิเคชัน ($) สำนวน: การใช้ที่ถูกต้อง
ผมได้อ่านโลกแห่งความจริง Haskellและฉันกำลังใกล้จะจบ แต่เรื่องของรูปแบบที่ได้รับการ niggling ที่ผมจะทำอย่างไรกับ(.)และ($)ผู้ประกอบการ เมื่อคุณเขียนฟังก์ชั่นที่เป็นองค์ประกอบของฟังก์ชั่นอื่น ๆ ที่คุณเขียนมันชอบ: f = g . h แต่เมื่อคุณใช้บางสิ่งกับท้ายฟังก์ชั่นเหล่านั้นฉันเขียนมันแบบนี้ k = a $ b $ c $ value แต่หนังสือจะเขียนดังนี้: k = a . b . c $ value ตอนนี้สำหรับฉันแล้วพวกเขาดูมีประโยชน์เทียบเท่าพวกเขาทำสิ่งเดียวกันในสายตาของฉัน อย่างไรก็ตามยิ่งฉันดูมากเท่าไหร่ฉันก็ยิ่งเห็นคนเขียนหน้าที่ของตนมากขึ้นในลักษณะที่หนังสือเล่มนี้เขียนขึ้นด้วย(.)อันดับแรกและสุดท้ายเท่านั้นที่($)จะใช้เพื่อผนวกค่าเพื่อประเมินจำนวนมาก . มีเหตุผลในการใช้วิธีหนังสือที่ดีกว่าการใช้($)สัญลักษณ์ทั้งหมดหรือไม่ หรือมีแนวปฏิบัติที่ดีที่สุดที่ฉันไม่ได้รับบ้าง หรือมันฟุ่มเฟือยและฉันไม่ควรกังวลเกี่ยวกับเรื่องนี้เลย?

4
สัญลักษณ์“ @” หมายถึงอะไรในการอ้างอิงรายการใน Haskell
ฉันเจอโค้ด Haskell ที่มีลักษณะดังนี้: ps@(p:pt) อะไร@เป็นสัญลักษณ์หมายถึงในบริบทนี้? ฉันไม่พบข้อมูลใด ๆ ใน Google (น่าเสียดายที่ค้นหาสัญลักษณ์ใน Google ได้ยาก) และฉันไม่พบฟังก์ชันในเอกสาร Prelude ดังนั้นฉันจึงคิดว่ามันต้องเป็นน้ำตาลที่เป็นประโยคแทน
128 haskell  syntax 

4
อะไรคือกรณีการใช้งานที่น่าสนใจสำหรับประเภทวิธีการที่ต้องพึ่งพา
ประเภทวิธีการขึ้นอยู่กับที่เคยเป็นคุณลักษณะทดลองมาก่อนตอนนี้ได้เปิดใช้งานโดยค่าเริ่มต้นในหีบและดูเหมือนว่าสิ่งนี้จะสร้างความตื่นเต้นในชุมชน Scala ดูครั้งแรกยังไม่ชัดเจนในทันทีว่าสิ่งนี้มีประโยชน์สำหรับอะไร Heiko Seeberger โพสต์ตัวอย่างง่าย ๆ ของประเภทวิธีการที่ขึ้นกับที่นี่ซึ่งสามารถเห็นได้ในความคิดเห็นสามารถทำซ้ำได้อย่างง่ายดายด้วยพารามิเตอร์ประเภทในวิธีการ นั่นไม่ใช่ตัวอย่างที่น่าสนใจ (ฉันอาจจะขาดอะไรบางอย่างที่ชัดเจนโปรดแก้ไขฉันหากมี) มีตัวอย่างกรณีการใช้งานที่ใช้งานได้จริงและมีประโยชน์อะไรบ้างสำหรับประเภทวิธีการที่พึ่งพาซึ่งพวกเขาได้เปรียบอย่างชัดเจนมากกว่าทางเลือกอื่น ๆ สิ่งที่น่าสนใจที่เราสามารถทำได้กับสิ่งเหล่านี้ที่ไม่เคยเป็นไปได้ / ง่ายมาก่อน? พวกเขาซื้ออะไรเราจากคุณสมบัติระบบประเภทที่มีอยู่? นอกจากนี้ประเภทวิธีการที่ขึ้นอยู่กับการเปรียบเทียบหรือการวาดแรงบันดาลใจจากคุณสมบัติใด ๆ ที่พบในระบบประเภทของภาษาพิมพ์ขั้นสูงอื่น ๆ เช่น Haskell, OCaml หรือไม่

2
โปรแกรม Small Haskell ที่คอมไพล์ด้วย GHC เป็นไบนารีขนาดใหญ่
แม้แต่โปรแกรม Haskell ขนาดเล็กเล็กน้อยก็กลายเป็นโปรแกรมปฏิบัติการขนาดมหึมา ฉันได้เขียนโปรแกรมขนาดเล็กที่คอมไพล์ (ด้วย GHC) เป็นไบนารีโดยมีขนาดขยาย 7 MB! อะไรทำให้แม้แต่โปรแกรม Haskell ขนาดเล็กที่คอมไพล์เป็นไบนารีขนาดใหญ่ได้ ฉันจะทำอะไรได้บ้างเพื่อลดสิ่งนี้

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 …

4
ลักษณะการทำงานของ foldl กับ foldr กับรายการที่ไม่มีที่สิ้นสุด
รหัสสำหรับฟังก์ชัน myAny ในคำถามนี้ใช้ตัวพับ หยุดการประมวลผลรายการที่ไม่มีที่สิ้นสุดเมื่อเพรดิเคตเป็นที่พอใจ ฉันเขียนใหม่โดยใช้ foldl: myAny :: (a -> Bool) -> [a] -> Bool myAny p list = foldl step False list where step acc item = p item || acc (โปรดสังเกตว่าอาร์กิวเมนต์ของฟังก์ชัน step จะถูกย้อนกลับอย่างถูกต้อง) อย่างไรก็ตามจะไม่หยุดประมวลผลรายการที่ไม่มีที่สิ้นสุดอีกต่อไป ฉันพยายามติดตามการดำเนินการของฟังก์ชันตามคำตอบของ Apocalisp : myAny even [1..] foldl step False [1..] step (foldl step False …

6
Haskell Type vs Data Constructor
ผมเรียนรู้จาก Haskell learnyouahaskell.com ฉันมีปัญหาในการทำความเข้าใจตัวสร้างประเภทและตัวสร้างข้อมูล ตัวอย่างเช่นฉันไม่ค่อยเข้าใจความแตกต่างระหว่างสิ่งนี้: data Car = Car { company :: String , model :: String , year :: Int } deriving (Show) และนี่: data Car a b c = Car { company :: a , model :: b , year :: c } deriving (Show) ผมเข้าใจว่าคนแรกที่เป็นเพียงการใช้หนึ่งคอนสตรัค ( Car) …
124 haskell 

1
Emacs Interactive-Haskell จะแทนที่การไม่ตอบสนองหากไดเร็กทอรี cabal หรือการทำงานตั้งค่าเป็นไดเร็กทอรีโครงการ
ฉันทำงานเป็นพฤติกรรมแปลก ๆ กับ repl อินเตอร์แอคที-Haskell emacsใน เมื่อฉันซอร์สไฟล์emacsมินิบัฟเฟอร์จะแสดงชุดข้อความโต้ตอบแบบโต้ตอบ: Start a new project named 'myproject'? Cabal dir (guessed from myproject.cabal): Build target (empty for default): Set current directory: ถ้าฉันปล่อยไดเร็กทอรี cabal หรือไดเร็กทอรีปัจจุบันเป็นค่าดีฟอลต์ของไดเร็กทอรีโปรเจ็กต์การจำลองจะไม่ตอบสนอง ฉันได้รับแลมบ์ดาพรอมต์ในหน้าต่าง Haskell แบบโต้ตอบฉันสามารถพิมพ์ได้ แต่เมื่อฉันกด Enter มันจะไม่ประเมิน เคอร์เซอร์จะอยู่ในบรรทัดเดียวกันราวกับว่าฉันไม่ได้กด Enter เลย ถ้าฉันเปลี่ยนทั้งสองไดเร็กทอรีเหล่านั้นเป็นพา ธ อื่นนอกเหนือจากไดเร็กทอรีโปรเจ็กต์ของฉันการจำลองจะทำงานตามปกติและประเมินนิพจน์ตามที่คาดไว้
124 haskell  emacs  cabal  ghci 

3
จุดประสงค์ของผู้อ่าน monad คืออะไร?
monad ผู้อ่านมีความซับซ้อนและดูเหมือนจะไม่มีประโยชน์ ในภาษาที่จำเป็นเช่น Java หรือ C ++ ไม่มีแนวคิดที่เทียบเท่าสำหรับผู้อ่าน monad ถ้าฉันไม่เข้าใจผิด คุณช่วยยกตัวอย่างง่ายๆและทำให้ชัดเจนขึ้นหน่อยได้ไหม

16
คู่มือเริ่มต้นสำหรับ Haskell? [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดขึ้นมาใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันมองหาคำแนะนำที่ดีเกี่ยวกับ Haskell มาระยะหนึ่งแล้ว แต่ยังไม่พบคำแนะนำที่น่าสนใจพอที่จะอ่านและ / หรือเข้าท่า ฉันเคยสัมผัสกับ Haskell มาก่อนไม่กี่ปี แต่ฉันจำไม่ได้มากนัก ฉันจำคำว่า "Aha!" ได้ - รู้สึกเหลือเชื่อมากเมื่อฉันได้มันมาในที่สุดและมันก็สนุกดีที่ได้เล่นด้วยดังนั้นฉันจึงต้องการค้นพบศิลปะที่หายไปของ Haskell อีกครั้ง ฉันคุ้นเคยกับ Ruby และเทคนิคการเขียนโปรแกรมที่ใช้งานได้ดีดังนั้นฉันคิดว่าฉันไม่ได้อยู่ในความมืดอย่างสมบูรณ์ ลิงก์ใด ๆ

22
เหตุใดการประเมินแบบขี้เกียจจึงมีประโยชน์?
ฉันสงสัยมานานแล้วว่าทำไมการประเมินแบบขี้เกียจจึงมีประโยชน์ ฉันยังไม่เคยมีใครอธิบายให้ฉันเข้าใจได้ ส่วนใหญ่จะจบลงด้วยการ "เชื่อใจฉัน" หมายเหตุ: ฉันไม่ได้หมายถึงการท่องจำ

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

3
วิธีชวเลขในการกำหนดเขตข้อมูลเดียวในบันทึกในขณะที่คัดลอกเขตข้อมูลที่เหลือ?
สมมติว่าฉันมี ADT บันทึกต่อไปนี้: data Foo = Bar { a :: Integer, b :: String, c :: String } ฉันต้องการฟังก์ชันที่ใช้บันทึกและส่งคืนเร็กคอร์ด (ประเภทเดียวกัน) โดยที่ฟิลด์ทั้งหมดยกเว้นฟิลด์ใดฟิลด์หนึ่งมีค่าที่เหมือนกันกับฟิลด์ที่ส่งผ่านเป็นอาร์กิวเมนต์ดังนี้: walkDuck x = Bar { a = a x, b = b x, c = lemonadeStand (a x) (b x) } ข้างต้นใช้งานได้ แต่สำหรับบันทึกที่มีฟิลด์มากกว่า (พูด10) การสร้างฟังก์ชันดังกล่าวจะทำให้เกิดการพิมพ์จำนวนมากซึ่งฉันรู้สึกว่าไม่จำเป็นเลยทีเดียว มีวิธีที่น่าเบื่อน้อยกว่าในการทำเช่นเดียวกันหรือไม่?
119 haskell  record 

5
ไวยากรณ์“ Just” ใน Haskell หมายความว่าอย่างไร
ฉันได้สำรวจอินเทอร์เน็ตเพื่อหาคำอธิบายที่แท้จริงว่าคำหลักนี้ทำอะไร ทุกบทช่วยสอนของ Haskell ที่ฉันได้ดูเพียงแค่เริ่มใช้มันแบบสุ่มและไม่เคยอธิบายว่ามันทำอะไร (และฉันได้ดูหลาย ๆ อย่าง) นี่คือส่วนพื้นฐานของรหัสจากโลกแห่งความจริง HaskellJustที่ใช้ ฉันเข้าใจว่าโค้ดใช้ทำอะไร แต่ฉันไม่เข้าใจว่าจุดประสงค์หรือหน้าที่ของJustมันคืออะไร lend amount balance = let reserve = 100 newBalance = balance - amount in if balance < reserve then Nothing else Just newBalance จากสิ่งที่ฉันสังเกตเห็นมันเกี่ยวข้องกับการMaybeพิมพ์ แต่นั่นเป็นสิ่งที่ฉันเรียนรู้ได้ดีทีเดียว คำอธิบายที่ดีเกี่ยวกับความJustหมายจะได้รับการชื่นชมมาก
118 haskell  syntax 

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