Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
pcmax
370 / 46 / 5
Регистрация: 29.01.2018
Сообщений: 854
1

Функции

12.03.2019, 01:21. Просмотров 3362. Ответов 14
Метки нет (Все метки)

привет
помогите разобраться





Haskell
1
2
3
4
5
6
7
8
9
10
11
module F where
func :: int -> int  -- тут я описал функцию
func x y = x+y  -- тут определил
 
cin = print $ func 2 3
 
дальше делаю 
Prelude > :load f -- так как мой файл f.hs
и вылетает ошибка
 
скажите пожалуйста почему
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2019, 01:21
Ответы с готовыми решениями:

Функции. Как после одного возвратного значения функции отталкиваться от возврата другой функции
Написал код, в котором 2 функции одна возвращает стринговое значение, вторая должна бы вернуть...

excel. создать таблицу значение кусочно-непрерывной функции y на интервале [xmin; xmax] с шагом h, для расчета функции y используя логические функции

XML-комментарии в объявлении функции - получить подсказки для параметров функции
Всем здравствуйте. ''' </summary> ''' Это сообщение объясняет назначение функции '''...

Вычислить значение функции e^x=1+x+x^2/2+x^3+3 и сравнить полученной результат c значением стандартной функции
Здраствуйте! Пожалуйста укажите услугу в помочи, вот задачка: Оформить у виде программы...

Найти среднее арифметическое значений функции f(x) в точках а, b, (a+b)/2, используя обращение к функции
f=((e^x+e^(-x))/2)*lg()2*x) Добавлено через 3 часа 7 минут что реально никто не может помочь?

14
allmass
260 / 192 / 69
Регистрация: 09.03.2019
Сообщений: 439
12.03.2019, 01:45 2
func :: Int->Int->Int
3
Curry
3125 / 2142 / 262
Регистрация: 01.06.2013
Сообщений: 4,605
Записей в блоге: 9
12.03.2019, 01:51 3
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Вы описали функцию от одного аргумента, а нужно от двух.
Имена конкретных типов должны быть с заглавной буквы. Исходные файлы Haskell тоже.
Haskell
1
func :: Int -> Int -> Int
В следующий раз приводите сообщение об ошибке.
2
Catstail
Модератор
25191 / 12859 / 2380
Регистрация: 12.02.2012
Сообщений: 20,971
12.03.2019, 08:34 4
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

А можно было и не писать совсем сигнатуру функции. Haskell построит ее сам (причем, максимально общую)
1
12.03.2019, 08:34
pcmax
370 / 46 / 5
Регистрация: 29.01.2018
Сообщений: 854
12.03.2019, 13:26  [ТС] 5
спасибо ребята....
0
Curry
3125 / 2142 / 262
Регистрация: 01.06.2013
Сообщений: 4,605
Записей в блоге: 9
12.03.2019, 16:52 6
Цитата Сообщение от Catstail Посмотреть сообщение
А можно было и не писать совсем сигнатуру функции.
Плохой стиль. Сигнатура - дополнительный контроль самого себя. Часто компилятор находит ошибку в несоответствии сигнатуры и того что он вывел являющуюся следствием смысловой ошибки. С сигнатурой сообщения о неправильном соответствии типа более информативные.
Я использую флаг компилятора -Wall, который включает, в том числе и "Top-level binding with no type signature".
И всем рекомендую, для всех языков где такое есть.
2
Catstail
Модератор
25191 / 12859 / 2380
Регистрация: 12.02.2012
Сообщений: 20,971
12.03.2019, 17:25 7
Цитата Сообщение от Curry Посмотреть сообщение
Плохой стиль.
- но ведь можно, изучив сгенерированную компилятором сигнатуру, вставить ее в подобающее место программы.
2
Curry
3125 / 2142 / 262
Регистрация: 01.06.2013
Сообщений: 4,605
Записей в блоге: 9
12.03.2019, 17:36 8
Catstail, да, можно. Я к тому что оставлять код с невложенными функциями без сигнатур не стоит.
И, опять же, какую сигнатуру компилятор сгенерировал нужно самому проверить, а не вставлять бездумно.
В этом суть.
2
pcmax
370 / 46 / 5
Регистрация: 29.01.2018
Сообщений: 854
12.03.2019, 18:38  [ТС] 9
ребята можно еще попросить... плаваю в понятиях.

правильно ли я понимаю:
:: два двоеточия значат или говорят " имеет тип" например a:: Int значит a имеет тип Int.

$ - значит все что после будет иметь высший приоритет
-> знак отображения функции... я так понял
: все что перед ним будет поставленно в начало того что после него.
main IO () - не понял. авторы учебников обещают потом рассказать. я так и не нашел , где это потом. правда я только как пару дней знаком с языком Haskell. все только предстоит. надеюсь, что с Вашей помощью пойму синтаксис.
let were - тоже не понял.

если несложно поправте пожалуйста
0
XRuZzz
Антикодер
1820 / 794 / 46
Регистрация: 15.09.2012
Сообщений: 2,917
12.03.2019, 19:56 10
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от pcmax Посмотреть сообщение
:: два двоеточия значат или говорят " имеет тип" например a:: Int значит a имеет тип Int.
Видимо правильно:
LYAH → Types and Typeclasses (Самое начало главы)
1
XRuZzz
Антикодер
1820 / 794 / 46
Регистрация: 15.09.2012
Сообщений: 2,917
12.03.2019, 20:07 11
LYAH → Higher order functions → Function application with $

Подробные курсы Дениса Москвина на русском:
Полезные ссылки по Haskell
2
Curry
3125 / 2142 / 262
Регистрация: 01.06.2013
Сообщений: 4,605
Записей в блоге: 9
12.03.2019, 20:07 12
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от pcmax Посмотреть сообщение
a:: Int значит a имеет тип Int
да
Цитата Сообщение от pcmax Посмотреть сообщение
$ - значит все что после будет иметь высший приоритет
Почти. $ - это обычная функция с сигнатурой (a -> b) -> a -> b , но ей установлен минимальный приоритет.
Так что место знака $ можно заменить на круглую открывающую скобку, а закрывающую скобку поставить в конце выражения.

Цитата Сообщение от pcmax Посмотреть сообщение
-> знак отображения функции... я так понял
Несколько значений. В сигнатуре функции отделяет типы аргументов и результата.
Лябда-функция: \ аргумент аргумент -> выражение
В case
Haskell
1
2
3
4
    case выражение of
                           [] -> выражение
                           (x:xs) -> выражение
                           _ -> выражение
И в некоторых других случаях.
Цитата Сообщение от pcmax Посмотреть сообщение
: все что перед ним будет поставленно в начало того что после него.
Если в выражении (справа от = или ->) то присоединить элемент к началу списка.
Если в образце (слева от = или ->) то разбить список на первый элемент и остаток.

Учебник читать не пробовали? В прикреплённых темах этого раздела есть.
3
XRuZzz
Антикодер
1820 / 794 / 46
Регистрация: 15.09.2012
Сообщений: 2,917
12.03.2019, 20:20 13
Цитата Сообщение от Curry Посмотреть сообщение
Учебник читать не пробовали? В прикреплённых темах этого раздела есть.
Если судить по себе, то это лечится тыканием носом в нужные человеку участки из книги. Иначе не поверят, что книга помогает. Психология...

Добавлено через 4 минуты
"Learn You a Haskell for Great Good!" есть на в русском переводе.
1
pcmax
370 / 46 / 5
Регистрация: 29.01.2018
Сообщений: 854
12.03.2019, 20:23  [ТС] 14
за учебник огромное спасибо....
за ответы еще больше
0
XRuZzz
Антикодер
1820 / 794 / 46
Регистрация: 15.09.2012
Сообщений: 2,917
12.03.2019, 20:25 15
Вот ещё важная ссылка - видосы из новых курсов Дениса Москвина(которые на stepike):
Функциональное программирование на языке Haskell
2
12.03.2019, 20:25
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2019, 20:25

Табулирование заданной функции и определение максимального и минимального значения функции в таблице
Разработать консольное приложение, производящее табулирование заданной функции и определение...

Найти среднее арифметическое значений функции f(x) в точках а, b, (a+b)/2, используя обращение к функции
Помогите срочно, хотя бы перевести формулу на язык С++

Какое значение возвращают функции (в частности, логические функции) по умолчанию в Лазарус?
Я наткнулся на одну неприятность. До сих пор я считал, что result в функциях по умолчанию равен...


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

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

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