192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
1

Для чего здесь in?

07.01.2018, 20:28. Показов 1284. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот функция которая суммирует чётные элементы списка
Haskell
1
2
3
4
5
6
7
8
9
10
11
evenSum :: [Integer] -> Integer
 
evenSum l = accumSum 0 l
 
accumSum n l = if l == []
                  then n
                  else let x = head l 
                           xs = tail l 
                       in if even x
                              then accumSum (n+x) xs
                              else accumSum n xs
Что здесь делает in, также хотелось бы узнать если писать let а потом объекты через Enter то это будет касаться только первого объекта или всех остальных тоже как здесь в коде показано
Haskell
1
2
let x = head l
xs = tail l
Добавлено через 9 минут
Одна тема Один вопрос ПОНЯЛ
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2018, 20:28
Ответы с готовыми решениями:

Для чего здесь this ?
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...

Для чего здесь нужен транзистор???
Доброго времени суток!!! Пытаюсь разобраться с этой схемой. Взята она с даташита отладочной платы...

Для чего здесь используется функция labels
Задание: Определить функцию для преобразования списка по принципу : (A B C) -> (((A)B)C) (defun...

Для чего здесь создается пустой итератор eos
Здравствуйте. Я хотел бы получить объяснение, для чего здесь создается пустой итератор eos. Как я...

7
Модератор
Эксперт функциональных языков программированияЭксперт Python
36578 / 20308 / 4218
Регистрация: 12.02.2012
Сообщений: 33,605
Записей в блоге: 13
07.01.2018, 20:33 2
Лучший ответ Сообщение было отмечено no swear как решение

Решение

Цитата Сообщение от no swear Посмотреть сообщение
Что здесь делает in
- in указывает область действия let. Я так думаю...

Мне кажется, проще так:

Haskell
1
2
3
sumEven xs = sumE 0 xs
             where sumE acc [] = acc
                   sumE acc (z:zs) = if even z then sumE (acc+z) zs else sumE acc zs
2
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
07.01.2018, 20:40  [ТС] 3
А пробелы и переносы в коде важны или на них можно не обращать внимания?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36578 / 20308 / 4218
Регистрация: 12.02.2012
Сообщений: 33,605
Записей в блоге: 13
07.01.2018, 20:54 4
Лучший ответ Сообщение было отмечено no swear как решение

Решение

В Хаскеле т.н. двумерный синтаксис. Поэтому отступы важны. Вот такой код

Haskell
1
2
3
sumEven xs = sumE 0 xs
where sumE acc [] = acc
sumE acc (z:zs) = if even z then sumE (acc+z) zs else sumE acc zs
не протранслируется. Перед where нужен хотя бы один пробел:

Haskell
1
2
3
sumEven xs = sumE 0 xs
 where sumE acc [] = acc
sumE acc (z:zs) = if even z then sumE (acc+z) zs else sumE acc zs
2
Модератор
5046 / 3275 / 526
Регистрация: 01.06.2013
Сообщений: 6,802
Записей в блоге: 9
07.01.2018, 21:27 5
Ну, проще то всего
Haskell
1
evenSum = sum . filter even
Но если вручную, то как Catstail, написал.
Или, заменим where на let и вместо if используем охранные выражения
Haskell
1
2
3
4
5
sumEven :: Integral a => [a] -> a
sumEven = let sumE acc [] = acc
              sumE acc (z:zs) | even z = sumE (acc+z) zs 
                              | otherwise = sumE acc zs
          in sumE 0
Это то же самое, просто так, для разнообразия.
2
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
07.01.2018, 21:55  [ТС] 6
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Integral a => [a] -> a
Что такое Integral?
0
Модератор
5046 / 3275 / 526
Регистрация: 01.06.2013
Сообщений: 6,802
Записей в блоге: 9
07.01.2018, 22:10 7
Цитата Сообщение от no swear Посмотреть сообщение
Что такое even?
Класс типов (набор функций). "Integral a => [a] -> a" означает что для типа который будет использоваться в функции sumEven должны быть определены функции из Integral и тех классов типов от которых Integral производный. (Несколько упрощаю.)
В sumEven используется функция even, которой требуется именно Integral. Ещё в sumEven используется (+), но эта функция входит в класс типов Num, от него происходит Real, а от него Integral, т.е. дополнительных ограничений указывать не нужно.
В sumEven можно передавать [Int] или [Integer] (и др.).
1
XRuZzz
08.01.2018, 11:03     Для чего здесь in?
  #8

Не по теме:

Цитата Сообщение от no swear Посмотреть сообщение
Что здесь делает in, также хотелось бы узнать если писать let а потом объекты через Enter то это будет касаться только первого объекта или всех остальных тоже как здесь в коде показано
Я думаю, с этими вопросами вам помогут. Но это самые базовые конструкции Haskell. Даже если совсем не читать книги по Haskell, можно легко найти ответы на эти вопросы.
Если не прикладывать чуть больше усилий, с дальнейшими сложными темами в Haskell вы не сможете разобраться. То есть я советую больше фокусироваться на учебных материалах, чем на вопросах в форуме. (Стараюсь не осуждать, просто моё мнение)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2018, 11:03

Объясните для чего здесь "1"?
Объясните пожалуйста для чего здесь 1(downto 1, delete(s,i,1) ? for i:=length(s) downto 1 do...

Для чего нужно писать в int main() в скобках всякие args потом объявлять переменные, и прочее. Для чего если можно в сборках это все обьявлять.
Для чего нужно писать в int main() в скобках всякие args потом объявлять переменные, и прочее. Для...

Для чего нужен Seed() и для чего его override?
Привет, ребята. Прочитал много разных статей про Seed(). И так и не могу понять зачем он нужен на...

Здесь есть какие нибудь ошибки ? и как здесь получается в ответе 6.25?
program r2; var b:real; begin b:=100; repeat b:=b/2; until b<10; writeln (b:0:2); end. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru