วิธีคำนวณระยะห่างโดยใช้ Pos ภาษา haskelllanguage

0

คำถาม

บอกว่าฉันถูกกำหนดนี้ประเภท: ประเภท Pos=(Int,Int)

ฉันอยากจะใช้อยู่เหนือประเภทที่จะคำนวณ thhe ระยะห่างระหว่างสองคะแนนและฉันเขียนเหมือนนี้:

type Pos = (Int, Int)
distancee :: Pos -> Pos -> Float
distancee Pos (x1,y1) (x2,y2) = sqrt((dx*dx)+(dy*dy))
    where
        dx = x2 - x1
        dy = y2 - y1

ฉันไม่รู้วิธีใช้ Pos และอยู่เหนือมันไม่ใช่ดังนั้นคุณช่วยบอกฉันได้ยังไงฉันแก้ไขเรื่องนั้น?

haskell
2021-11-23 15:55:48
1

คำตอบที่ดีที่สุด

5

มีสองปัญหาที่นี่ คนแรกที่นั่น Point คือพิมพ์นามแฝงสำหรับเป็น 2-tuple. มันดังนั้นไม่มีข้อมูล constructor. นี่หมายความว่าหัวหน้าของคน distancee ควรจะดูเหมือน:

type Pos = (Int, Int)

distancee :: Pos -> Pos -> Float
distancee (x1,y1) (x2,y2) = …

มีสองปัญหานั่นคือ subtracting สองคน Ints ผลใน Int,multiplying สองคน Ints ผลใน Intและเพิ่มสองคน Ints ด้วยกันต้องแสดงเป็น Int. นี่คือเพราะ (-) :: Num a => a -> a -> a, (*) :: Num a => a -> a -> aแล้ว (+) :: Num a => a -> a -> a ทุกคนมีลายเซ็นต์อยู่ที่ไหนสองคน operands และผลทุกคนก็มีเหมือนกันแบบนั้น เราไม่สามารถปรับใช้ sqrt :: Floating a => a -> a สำหรับ Intตั้งแต่มันต้องการเป็นประเภทนั่นมันเป็นสมาชิกของ Floating typeclass. เราสามารถใช้ประโยชน์จากตัว fromIntegral :: (Integral a, Num b) => a -> b ที่จะแปลงเป็นรายการของการ Integral พิมพ์ไปเป็นวัตถุของ Num ประเภทกับ:

distancee :: Pos -> Pos -> Float
distancee (x1,y1) (x2,y2) = sqrt (fromIntegral (dx*dx + dy*dy))
    where dx = x2 - x1
          dy = y2 - y1
2021-11-23 17:21:21

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่