Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Alekca
0 / 0 / 0
Регистрация: 31.08.2017
Сообщений: 13
1

Условные выражения

20.10.2017, 19:25. Просмотров 648. Ответов 13

Функцию value с числовым списком произвольной длины в качестве аргумента; если первый элемент списка 0, то функция возвращает пару, первым элементом которой является строка “Production”, а вторым число - произведение остальных элементов, если 1 – “Summa” и их сумму, если другое число, то возвращает сообщение “I don’t know” и 0.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2017, 19:25
Ответы с готовыми решениями:

Условные выражения
Вычислить значение функции в заданной точке: ...

Условные выражения
Помогите новичку пожайлуста :scratch: 1) Вычислить начение функции в заданой точке ...

Арифметиеские выражения и условные операторы
С помощью оператора if определить, находится ли точка на плоскости в замкнутой области. Если...

Условные операторы и логические выражения
Записать логические выражения, используя условные операторы, операции отношений и логические...

Арифметические выражения и условные операторы
С помощью условного оператора определить, находится ли точка на плоскости в замкнутой области....

13
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,526
Записей в блоге: 9
20.10.2017, 20:12 2
Haskell
1
2
3
4
value :: (Num a, Eq a) => [a] -> (String,a) 
value (0:xs@(_:_)) = ("Production", product xs)
value (1:xs@(_:_)) = ("Summa", sum xs)
value _ = ("I don't know", 0)
Если список состоит из менее чем 2-х элементов, то тоже возвращается ("I don't know", 0).
3
Catstail
Модератор
24916 / 12640 / 2312
Регистрация: 12.02.2012
Сообщений: 20,576
20.10.2017, 20:45 3
Haskell
1
2
3
4
5
6
7
task xs = case h of
          0 -> ("Production",p)
          1 -> ("Summa", s)
          _ -> ("I dont know",0)
          where h = head xs
                p = (product . tail) xs
                s = (sum . tail) xs
3
Curry
20.10.2017, 21:15
  #4

Не по теме:

Catstail, мне кажется, Вы, последнее время злоупотребляете where. Например, тут, очевидно, в основном выражении всё помещается, т.к. h,p,s используются по разу. Полагаете что так методически правильно или просто дело вкуса?

0
Catstail
Модератор
24916 / 12640 / 2312
Регистрация: 12.02.2012
Сообщений: 20,576
20.10.2017, 21:37 5
KolodeznyDiver, не "последнее время", а - увы - всегда! Ваша правда!
1
Curry
20.10.2017, 21:44
  #6

Не по теме:

Catstail, ну, в этом же нет ничего противозаконного. Я просто так поинтересовался.

0
Catstail
20.10.2017, 22:37
  #7

Не по теме:

KolodeznyDiver, я стараюсь учиться у Вас. За что Вам - спасибо!

0
Curry
21.10.2017, 00:15
  #8

Не по теме:

Catstail, ох уж эти комплименты ("что Вы, что Вы, только после Вас"). Нашли у кого учиться.

0
_Ivana
21.10.2017, 14:57
  #9

Не по теме:

Нет ничего приятнее, чем наблюдать, как гуры обмениваются любезностями! :)

0
Alekca
0 / 0 / 0
Регистрация: 31.08.2017
Сообщений: 13
25.10.2017, 21:01  [ТС] 10
как я понял это (Num a, Eq a) обозначают классы сложения и умножения, сравнения?
а эта xs@(_:_) конструкция обозначает декомпозиция не пустого списка?

Добавлено через 15 секунд
как я понял это (Num a, Eq a) обозначают классы сложения и умножения, сравнения?
а эта xs@(_:_) конструкция обозначает декомпозиция хвоста не пустого списка?
0
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,526
Записей в блоге: 9
25.10.2017, 21:10 11
Alekca, пренебрегая точностью определений да.
https://www.stackage.org/haddock/lts...ude.html#t:Num
https://www.stackage.org/haddock/lts...lude.html#t:Eq
xs@(_:_) - справа от @ декомпозиция обязательно непустого списка, что бы образцу удовлетворял только непустой список. А слева от @ список до декомпозиции.
1
Alekca
0 / 0 / 0
Регистрация: 31.08.2017
Сообщений: 13
25.10.2017, 21:10  [ТС] 12
Можете пожалуйста объяснить как работает эта (Num a, Eq a) конструкция
0
Catstail
Модератор
24916 / 12640 / 2312
Регистрация: 12.02.2012
Сообщений: 20,576
25.10.2017, 21:50 13
Сигнатура функции
Haskell
1
value :: (Num a, Eq a) => [a] -> (String,a)
читается так: функция value принимает на вход список произвольного типа a, принадлежащему классам типов Num и Eq (самые общие числовые типы, значения которых можно сравнивать на равенство). Возвращает функция кортеж, первым элементом которого является строка, а вторым - значение типа a.
2
Curry
2991 / 2072 / 257
Регистрация: 01.06.2013
Сообщений: 4,526
Записей в блоге: 9
25.10.2017, 23:47 14
Цитата Сообщение от Alekca Посмотреть сообщение
Можете пожалуйста объяснить как работает эта (Num a, Eq a) конструкция
Она означает что а (имя произвольно, лишь бы начиналось с маленькой буквы) - это (при вызове функции value) должен быть какой то тип для которого определены экземпляры классов типов Num и Eq. То есть для него определены функции и операторы (в Haskell это одно и тоже) которые определены (являются членами) этих классов типов, и, по этому,
компилятор разрешит их использовать внутри функции.

На низком уровне (реализации) и Num a, и Eq a становятся указателями на таблицы функций классов типов реализованных для конкретных типов.
То есть, если мы вызовем value для [Int], то в эти невидимые (в исходном коде) аргументы будут подставлены таблицы реализаций этих классов типов для Int.
2
25.10.2017, 23:47
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2017, 23:47

Условные переходы. Вычислить значение выражения
Составьте программу, предназначенную для вычисления значения переменной y, где y=(под корнем)x-6...

Условные выражения включающие вызов функции с типом bool
Есть такой код, который определяет является ли число простым: #include <iostream> #include...

Напишите программу, которая во входной последовательности символов типа pastext выделяет и классифицирует бинарные условные выражения вида A Ө B
Напишите программу, которая во входной последовательности символов типа pastext выделяет и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.