2013-10-11 2 views
0

Я хочу, чтобы после достижения первого содержать, выполняя множество функций, таких как func1, тогда finc2, тогда fun3 есть ли способ сделать это в haskell? Я не уверен в использовании >>?Добавить действие после этого условия в haskell

myexe [] = [] 
myexe (x:xs) 
      | x < head xs    = myexe xs , func1, func2 , func3 
      | otherwise    = x 
+1

Выполнение нескольких функций в порядке не имеет никакого реального значения в Haskell, если они не монадических функции. Желаете ли вы выполнять монадические операции или хотите выполнить дополнительную обработку с возвращаемым значением? Помните, что чистые функции _can't_ ничего не модифицируют, а только возвращают значение. Haskell даже не вычисляет функцию, если значение не требуется – bheklilr

+3

Это звучит для меня как проблема XY. У вас есть проблема X, которую вы хотите решить, и идея Y о том, как ее решить, и вы спрашиваете о своей идее, а не о проблеме. Я призываю вас сделать шаг назад и подумать о том, как задать хороший вопрос о X - вы получите лучший совет! –

ответ

3

Если вы хотите несколько функций, вы всегда можете написать

result = f3 (f2 (f1 x)) 

или же, с помощью приложения функции

result = f3 $ f2 $ f1 x 

или же, используя функциональный состав

result = f3 . f2 . f1 $ x 

Вы можно было бы найти более подробно здесь: LYAH

0

Каковы типы для func1 2 и 3?

Вы можете сделать func1. func2. func3. myexe хз Если они все [а] -> [а]

Также остерегайтесь:

  1. x < head xs может сделать head [], генерируя Exeption
  2. = x ошибку, если х не список справа тип.
1

Я не уверен, если это то, что вы хотите, но это может быть «пусть»:

| x < head xs    = let 
           a = myexe xs 
           b = func1 a 
           c = func2 b 
        in func3 c 
Смежные вопросы