Haskell中my函数的更改类型签名
我和哈斯凯尔之间有些问题,我对这门语言还很陌生。我让我的函数运行和工作,但它只检查整数,我被要求使它与类型a元素一起工作。如果能帮上点忙,我将不胜感激 我需要的类型签名是:Haskell中my函数的更改类型签名,haskell,type-signature,Haskell,Type Signature,我和哈斯凯尔之间有些问题,我对这门语言还很陌生。我让我的函数运行和工作,但它只检查整数,我被要求使它与类型a元素一起工作。如果能帮上点忙,我将不胜感激 我需要的类型签名是: allElementsReachable :: (Eq a) => Int -> a -> [(a,a)] -> [a] nextSteps :: (Eq a) => [a] -> [(a,a)] -> [[a]] 这是我目前的代码: oneHop :: (Eq a) =>
allElementsReachable :: (Eq a) => Int -> a -> [(a,a)] -> [a]
nextSteps :: (Eq a) => [a] -> [(a,a)] -> [[a]]
这是我目前的代码:
oneHop :: (Eq a) => a -> [(a,a)] -> [a]
oneHop n [] = []
oneHop n ((x,y):xs)
| n == x = y : oneHop n xs
| otherwise = oneHop n xs
nextSteps :: [Int] -> [(Int,Int)] -> [[Int]]
nextSteps (x:xs) l = map (concatenateList (x:xs)) (path xs l (oneHop x l))
path :: [Int] -> [(Int,Int)] -> [Int] -> [Int]
path x l [] = [1]
path [] l y = y
path (x:[]) l (y:ys)
| y == x = oneHop x l
| otherwise = path [x] l ys
path (x:xs) l (y:ys)
| y == x = path xs l (oneHop x l)
| otherwise = path (x:xs) l ys
concatenateList :: [Int] -> Int -> [Int]
concatenateList (x:xs) n = x : concatenateList xs n
concatenateList [] n = [n]
allElementsReachable :: Int -> Int -> [(Int,Int)] -> [Int]
allElementsReachable 0 x l = [x]
allElementsReachable n x l = allElementsReachable2 (n-1) l (oneHop x l)
allElementsReachable2 :: Int -> [(Int,Int)] -> [Int] -> [Int]
allElementsReachable2 n l [] = []
allElementsReachable2 0 l x = x
allElementsReachable2 n l (x:xs) = (allElementsReachable2 (n-1) l (oneHop x l)) ++ (allElementsReachable2 n l xs)
在助手函数中尝试将尽可能多的其他项转换为
a
,当然,考虑到这些是您正在处理的图形项。因此,我需要将其他助手函数中的所有Int
更改为a
?@AlexCagira:并非所有Int
s,因为allegementsreachable
中的第一个参数看起来像一个“跃点计数器”。因此,关于跃点计数器的内容仍然是Int
s,这更多的是关于Int
的内容,但通常更多的是一个图形节点。因此,只有对的列表[(Int,Int)]
,我输入的元素之一Int
,以及输出列表[Int]
。我必须把它们改成a
。