Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
gyok
1 / 1 / 0
Регистрация: 18.05.2014
Сообщений: 19
1

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

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

Есть задача: Напишите функцию 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2014, 16:02
Ответы с готовыми решениями:

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

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

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

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

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

4
Araneo
649 / 259 / 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
korvin_
2763 / 2034 / 365
Регистрация: 28.04.2012
Сообщений: 6,940
18.05.2014, 17:26 3
Цитата Сообщение от gyok Посмотреть сообщение
выдает ошибку
Потому что, во-первых, скобки неправильно расставил и во-вторых, переменная в образце не может появляться дважды.
1
gyok
1 / 1 / 0
Регистрация: 18.05.2014
Сообщений: 19
18.05.2014, 17:31  [ТС] 4
Божественно
0
Catstail
Модератор
25026 / 12729 / 2337
Регистрация: 12.02.2012
Сообщений: 20,726
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
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2014, 18:27

Функция на 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® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.