Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
1 / 1 / 0
Регистрация: 18.05.2014
Сообщений: 19
1

Функция сравнения на близость чисел / Haskell

18.05.2014, 16:02. Показов 3104. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть задача: Напишите функцию beside :: Nat -> Nat -> Bool , которая будет возвращать True только в том случае,
если два аргумента находятся рядом, то есть один из них можно получить через другой операцией Succ .
вот код который нам дан:
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
module Nat where
 
data Nat = Zero | Succ Nat
    deriving (Show, Eq, Ord)
 
instance Num Nat where
    (+) a Zero     = a
    (+) a (Succ b) = Succ (a + b)
 
    (*) a Zero     = Zero
    (*) a (Succ b) = a + (a * b)
 
    fromInteger 0  = Zero
    fromInteger n  = Succ (fromInteger (n-1))
 
    abs x          = x
    signum Zero    = Zero
    signum _       = Succ Zero
 
    negate _       = error "negate is undefined for Nat"
Когда пишу
Haskell
1
2
beside :: Nat -> Nat -> Bool
beside a Succ(a) = True
выдает ошибку
Conflicting definitions for `a'
Bound at: Nat.hs:23:8
Nat.hs:23:15
In an equation for `beside'

как мне написать эту функцию не используя if then else?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2014, 16:02
Ответы с готовыми решениями:

Функция вывода структуры haskell
Есть структура data Figure = Tel String String String Int Int | Cheh String...

Haskell Функция с несколькими переменными и циклом
Прошу помочь мне написать функцию. Вначале нужно объявить три переменные, затем проделать цикл. Два...

Функция сравнения двух чисел
Проверьте кто-нибудь код пожалуйста. Задача : Написать программу, выводящую на экран результат...

Какая существует встроенная функция в masm32 для сравнения чисел?
У меня есть код, в котором происходят вычисления Y и нужно найти такое значение Х при котором...

4
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
18.05.2014, 17:17 2
Лучший ответ Сообщение было отмечено gyok как решение

Решение

Например так.
Haskell
1
2
beside :: Nat -> Nat -> Bool
beside a b = a == Succ b || b == Succ a
1
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
18.05.2014, 17:26 3
Цитата Сообщение от gyok Посмотреть сообщение
выдает ошибку
Потому что, во-первых, скобки неправильно расставил и во-вторых, переменная в образце не может появляться дважды.
1
1 / 1 / 0
Регистрация: 18.05.2014
Сообщений: 19
18.05.2014, 17:31  [ТС] 4
Божественно
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
18.05.2014, 18:27 5
Лучший ответ Сообщение было отмечено gyok как решение

Решение

Или совсем длинно, но без if-then-else:

Haskell
1
2
3
4
beside :: Nat -> Nat -> Bool
beside a b | a == Succ b = True
           | b == Succ a = True
           | otherwise=False
0
18.05.2014, 18:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2014, 18:27
Помогаю со студенческими работами здесь

Место ФП и Haskell в компьютерной индустрии (Для чего он нужен, этот Haskell?)
"У нас" ? А где преподавание этой экзотики на высоте? Добавлено через 2 минуты А где такие...

Функция на C++ -> Функция на Haskell
Добрый день! Step* get_moves_white(const Board& board, Step* moves) { BitBoard movers, empty...

Сравнения, функция Эйлера
Помогите пожалуйста решить данные задания, самого на паре не было ( по болезни ), а задание...

Функция сравнения строк
sprintf(buf, "%c%c%s%s%s", s,s, month)-1], &s,".txt"); if(strcmp(DateChanged,buf)!=0) {...


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

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