คาดหวังชนิด`เป็น'กับ`สอง'ข้อผิดพลาดคือ:ภาษา haskelllanguage

0

คำถาม

ฉันกำลังเขียนโปรแกรมนั้นจะได้ค่ารายชื่อของ k ทีใกลทีสุดหางออกไปเพื่อนบ้านอยู่ระยะห่างคำสั่งจากเมตริก the imperial system d ที่จุดพีในช่องรายการ ps ของกระจุย ทุกคนควรจะกลับมาเป็นเพื่อนบ้านที่เหมาะสมหากอยู่ในรายการ ps เป็นน้อยกว่าเคองธาตุหลัก-แล้วอีก แล้วก็สองอย่างเท่าเทียมกันใกล้จุดที่ p ควรจะกลับมาจากพวกเขาเริ่มลำดับในรายการ ps

import Data.List

type Point a = (a,a)
type Metric a = (Point a) -> (Point a) -> Double

nearPoints ::  Int -> Metric a -> Point a -> [Point a] -> [Point a]
nearPoints k d p [] = []
nearPoints k d p ps = take k (sortOn (pointsDistCalc p) ps)

pointsDistCalc :: Metric Double
pointsDistCalc (t1,t1) (t2,t2) = sqrt(((t1-t2)^2)+((t1-t2)^2))

นี่คือข้อความผิดพลาด

    * Couldn't match type `a' with `Double'
      `a' is a rigid type variable bound by
        the type signature for:
          nearPoints :: forall a.
                        Int -> Metric a -> Point a -> [Point a] -> [Point a]
      Expected type: Point Double
        Actual type: Point a
    * In the first argument of `pointsDistCalc', namely `p'
      In the first argument of `sortOn', namely `(pointsDistCalc p)'
      In the second argument of `take', namely
        `(sortOn (pointsDistCalc p) ps)'
    * Relevant bindings include
        ps :: [Point a]
        p :: Point a
        d :: Metric a
        nearPoints :: Int -> Metric a -> Point a -> [Point a] -> [Point a]
11 | nearPoints k d p ps = take k (sortOn (pointsDistCalc p) ps)

ได้โปรดใครก็ได้ช่วยฉันกับเรื่องนี้

haskell list
2021-11-23 22:06:10
1

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

4

คุณกำหนดไว้ pointsDistCalc ตอนเป็น Metric สำหรับ Point Doubleเอจึนั่นหมายความว่า nearPoints ซึ่งก็เหมือนกับว่ามันจะทำลายมันระยะทางควรจะเป็น Point Doubleเอเช่นกัน

อย่างที่บอกลายเซ็นบ่งบอกว่าเป็นเมตริก the imperial system คือได้รับแล้วดังนั้นนั่นมัน ไม่ใช่ สักหน่อใช้ PointsDistCalc. คุณดังนั้นได้ด้วยอะไรซักอย่างนี้กับ:

nearPoints ::  Int -> Metric a -> Point a -> [Point a] -> [Point a]
nearPoints _ _ _ [] = []
nearPoints k d p0 ps = take k (sortOn (d p0) ps)

นั่นคือไม่จำเป็นต้องแบ่งนิยามในอีกสองคดีที่มีอยู่: sortOn จะกลับมาเป็นรายการว่างเปล่าถ้ามันคือให้การว่างรายการ:

nearPoints ::  Int -> Metric a -> Point a -> [Point a] -> [Point a]
nearPoints k d p0 ps = take k (sortOn (d p0) ps)
2021-11-23 22:16:58

ฉันไม่แน่ใจว่าตอนที่ฉัน compile มัฉันเข้าใจว่าข้อมูลรายการไม่ส่งออก sortOn
Bella James

มันควรจะทำงานแต่มันแค่บอกว่ามันไม่ใช่ประกาศอยู่ในขอบเขตของมัน
Bella James

@RobSam อะไรรุ่นของคุณใช้? sortOn คือแนะนำตั้งแต่ฐาน 4.8(ghc 7.10.1).
Willem Van Onsem

ขอบคุณฉันเห็นนั้นแต่ปัญหาก็คือระบบซึ่งฉันส่งพวกนี้มีอายุรุ่นดังนั้นฉันจะต้องใช้อีกแบบวิธีการ
Bella James

ของฉันขึ้นอยู่กับเดท
Bella James

@RobSam:ใช่,ฉัน trhink คุณจะต้องด้วยอะไรซักอย่างของตัวเองเวอร์ชั่น sortOn.
Willem Van Onsem

ฉัน manged ต้องให้มันมีทางอื่น
Bella James

ถึงแม้ว่ามันค่อนข้างเชื่องช้า
Bella James

ในภาษาอื่นๆ

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

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

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

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