Я новичок в Хаскеле.Я очень хорошо разбираюсь в императивных языках, но не в функционале.Хаскель мой первый как функциональный язык.
Я пытаюсь выяснить, как получить индекс наименьшего элемента в списке, где минимальный элемент определен мной.
Позвольте мне объяснить на примерах.
Например:
Сигнатура функции minList :: x -> [x]
let x = 2
let list = [2,3,5,4,6,5,2,1,7,9,2]
minList x list --output 1 <- is index
Это должно вернуть1. Поскольку at at list [1] равен 3. Он возвращает 1, потому что 3 является наименьшим элементом после x (= 2).
let x = 1
let list = [3,5,4,6,5,2,1,7,9,2]
minList x list -- output 9 <- is index
Он должен возвращать 9, поскольку в списке [9] 2 и2 - самый маленький элемент после 1. x = 1, который я определил.
То, что я пробовал до сих пор.
minListIndex :: (Ord a, Num a) => a -> [a] -> a
minListIndex x [] = 0
minListIndex x (y:ys)
| x > y = length ys
| otherwise = m
where m = minListIndex x ys
Когда я загружаю файл, я получаю эту ошибку
• Couldn't match expected type ‘a’ with actual type ‘Int’
‘a’ is a rigid type variable bound by
the type signature for:
minListIndex :: forall a. (Ord a, Num a) => a -> [a] -> a
at myFile.hs:36:17
• In the expression: 1 + length ys
In an equation for ‘minListIndex’:
minListIndex x (y : ys)
| x > y = 1 + length ys
| otherwise = 1 + m
where
m = minListIndex x ys
• Relevant bindings include
m :: a (bound at myFile.hs:41:19)
ys :: [a] (bound at myFile.hs:38:19)
y :: a (bound at myFile.hs:38:17)
x :: a (bound at myFile.hs:38:14)
minListIndex :: a -> [a] -> a (bound at myFile.hs:37:1)
Когда я изменяю функцию следующим образом
minListIndex :: (Ord a, Num a) => a -> [a] -> a
minListIndex x [] = 0
minListIndex x (y:ys)
| x > y = 2 -- <- modified...
| otherwise = 3 -- <- modifiedd
where m = minListIndex x ys
Я снова загружаю файл, затем он компилируется и запускается, но ofc вывод не нужен.
Что такоепроблема с
| x > y = length ys
| otherwise = m
?
Короче говоря: в основном, я хочу найти индекс наименьшего элемента, но выше, чем x, который я определил в сигнатуре параметра / функции.
Заранее спасибо за помощь!