Есть ли какой-либо способ для краткого выражения в Haskell
Я попытался написать инструкцию 3-4 в одной функции, но я получаю ошибку и не могу ее сделать, я попытался сделать что-то вроде этого:
foo x=
| x == foo1 = 5
| x == foo2 =3
| x == foo3 =1
| otherwise =2
where foo1= samplefunct1 x
foo2= samplefunct2 x
foo3= samplefunct3 x
Я знаю, что код немного бесполезен, но я просто написал это, чтобы привести пример о том, что я имею в виду.
Есть ли кто-нибудь, кто может мне помочь? Спасибо заранее.
Ответы
Ответ 1
Удалите =
после foo x
и введите свой код как
foo x
| x == foo1 = 5
| x == foo2 =3
| x == foo3 =1
| otherwise =2
where foo1 = samplefunct1 x
foo2 = samplefunct2 x
foo3 = samplefunct3 x
и вы в порядке.
Ответ 2
Этот код почти прав, вам нужен только правильный отступ: пробелы имеют значение в haskell. Кроме того, использование =
после foo
является ошибкой с защитой, поэтому вам также придется удалить это. Результат:
foo x
| x == foo1 = 5
| x == foo2 =3
| x == foo3 =1
| otherwise =2
where foo1= whatever1 x
foo2= whatever2 x
foo3= whatever3 x
Ответ 3
Если ваш отступ немного неровный, вот так:
foo x
| x == foo1 = 5
| x == foo2 =3
| x == foo3 =1
| otherwise =2
where foo1= samplefunct1 x
foo2= samplefunct2 x
foo3= samplefunct3 x
тогда действительно, сообщение об ошибке говорит о неожиданном =
(и в будущем, пожалуйста, включите полное сообщение об ошибке в теле вопроса).
Вы исправляете эту ошибку путем повторного выравнивания или с помощью явных разделителей {; }
{; }
, что делает его нечувствительным к пробелам:
foo x
| x == foo1 = 5
| x == foo2 =3
| x == foo3 =1
| otherwise =2
where { foo1= samplefunct1 x ;
foo2= samplefunct2 x ;
foo3= samplefunct3 x }
Это работает хорошо (не то, чтобы это был хороший стиль для использования). Иногда это даже кажется вам, но это не так, если в пробеле прячутся символы табуляции.