は、だから私は、カスタムデータ型を持つカスタムデータ型の最小値を検索し、のは次のように定義され、Struct
それを呼びましょう:私は何をする必要があることはStruct
内のすべての要素を通過することですハスケル:
data Struct = Struct [SubStruct] deriving (Read, Show)
data SubStruct = SubStruct (Int, Int) deriving (Read, Show)
fst
に基づいて最小値を探し、snd
に基づいて最小値を見つけます。それ、どうやったら出来るの? 具体的には、コード内の例に基づいて、
のように別のSubStruct
を取得したいとします。
現在、私はこのことによって開始:
import Data.List
import Data.Function (on)
import Data.List (sortBy)
data Struct = Struct [SubStruct] deriving (Read, Show)
data SubStruct = SubStruct (Int, Int) deriving (Read, Show )
struct s sx = Struct(s:sx)
subStruct :: (Int, Int) -> SubStruct
subStruct (x, y) = SubStruct (x, y)
substructs = Struct $ [subStruct (0,1), subStruct (-2, 3), subStruct (4,-5)]
results xs = sortBy (compare `on` fst) (substructs xs)
をしかし、私はこのエラーを取得する:
Couldn't match expected type `t -> [(a, b)]'
with actual type `Struct'
Relevant bindings include
xs :: t (bound at bbox.hs:15:9)
results :: t -> [(a, b)] (bound at file.hs:15:1)
The function `substructs' is applied to one argument,
but its type `Struct' has none
In the second argument of `sortBy', namely `(substructs xs)'
In the expression: sortBy (compare `on` fst) (substructs xs)
'substructs'が値であるが、それは機能(あなたが州にこの投稿を誤りであるかのようにあなたがそれを使用する - おそらくあなたが読んでくださいより密接に)。さらに、 'SortBy(' on \ 'fstと比較)'は 'SubStruct'のリストに適用される正しい型を持っていません - ' Ord a => [(a、b)] - > [(a、 b)]。 – user2407038