คำถามติดแท็ก unit-type

1
มีกฎอะไรบ้างเกี่ยวกับฟังก์ชัน a -> () ที่ถูกประเมินใน Haskell
เช่นเดียวกับชื่อเรื่อง: สิ่งใดที่รับประกันว่าจะมีการประเมินฟังก์ชั่นการส่งคืนหน่วย Haskell? ใครจะคิดว่าไม่จำเป็นต้องเรียกใช้การประเมินผลใด ๆ ในกรณีเช่นนี้คอมไพเลอร์สามารถแทนที่การเรียกเช่นนั้นทั้งหมดด้วย()ค่าทันทีเว้นแต่จะมีการร้องขออย่างชัดเจนสำหรับความเข้มงวดที่มีอยู่ในกรณีนี้รหัสอาจต้องตัดสินใจว่าควร กลับ()หรือด้านล่าง ฉันได้ทดลองสิ่งนี้ใน GHCi และดูเหมือนว่าสิ่งตรงกันข้ามเกิดขึ้นนั่นคือฟังก์ชั่นดังกล่าวจะได้รับการประเมิน ตัวอย่างดั้งเดิมมากจะเป็น f :: a -> () f _ = undefined การประเมินf 1ข้อผิดพลาดเกิดขึ้นเนื่องจากการปรากฏตัวของundefinedดังนั้นการประเมินผลบางอย่างเกิดขึ้นแน่นอน แม้ว่าจะยังไม่ชัดเจนว่าการประเมินจะเกิดขึ้นในระดับใด ()บางครั้งก็ดูเหมือนจะเป็นไปตามที่ลึกที่สุดเท่าที่มันเป็นสิ่งจำเป็นในการประเมินทุกสายฟังก์ชั่นกลับมา ตัวอย่าง: g :: [a] -> () g [] = () g (_:xs) = g xs รหัสนี้จะวนg (let x = 1:x in x)ซ้ำไปเรื่อย ๆ หากแสดงด้วย แต่แล้ว f …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.