Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91

Деревья, так или не так?

22.05.2017, 13:20. Показов 1312. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
data BBaum a = BBlatt a | BKnoten (BBaum a) a (BBaum a)
deriving(Eq,Show)
 
 
BKnoten
(BKnoten
(BKnoten (BBlatt 42) 99 (BBlatt 1337))
22
(BKnoten (BBlatt 100) 12 (BBlatt 123))
)
5000
(BKnoten (BBlatt 180) 13 (BBlatt 2))
Правильное ли дерево мое к первому коду?


А вот наоборот картинка дерева, а я должна дописать код, так ли?

Haskell
1
2
data NBaum a = NBlatt a | NKnoten a [NBaum a]
deriving(Eq,Show)
Вот мое творение:

Haskell
1
2
NKnoten "Sonne" [NKnoten "Merkur", NKnoten "Venus", NKnoten "Erde" [NKnoten "Mond"],
    NKnoten "Mars", [NKnoten "Phobos" , NKnoten "Deimos"], NKnoten "Jupiter" [NKnoten "IO", NKnoten "Europa", NKnoten "Ganymed", NKnoten "Kalisto"]]
Помогите, пожалуйста))
Миниатюры
Деревья, так или не так?   Деревья, так или не так?  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.05.2017, 13:20
Ответы с готовыми решениями:

Или мне так не повезло с RLC APPA701 или так и есть?
Купил RTS APPA701. Купил в фиме "ПРИСТ" (никому её не посоветую). Прислали по почте и в день получения этого прибора был очень рад, т.к....

советуите как лучше написатъ sql запрос: так - id IN ($aaa) или так id IN (".$aaa.")
приветствую всем, вот ест скрипт: $aaa = "2,5,7"; mysql_query("DELETE FROM mytable WHERE id IN ($aaa) ",$db); ...

И так, что не так с моим запросом на добавление записи в таблицу?
$sql = 'INSERT INTO product ' . '(name, code, price, category_id, brand, availability,' . 'description,...

13
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
22.05.2017, 13:35  [ТС]
правильно ли так?

и еще вопрос сразу по теме...

Функция tree :: BBaum a -> NBaum a
которая конвентирует бинарное дерево в обычное ...
Как это должно выглядеть...Не совсем понимаю...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38175 / 21110 / 4307
Регистрация: 12.02.2012
Сообщений: 34,712
Записей в блоге: 14
22.05.2017, 16:52
Лучший ответ Сообщение было отмечено Ellie Tetka как решение

Решение

Да, на глаз - все верно.

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
data BBaum a = BBlatt a | BKnoten (BBaum a) a (BBaum a) deriving(Eq,Show)
  
data NBaum a = NBlatt a | NKnoten a [NBaum a] deriving(Eq,Show)  
 
tree :: BBaum a -> NBaum a
 
tree (BBlatt x) = NBlatt x
tree (BKnoten l x r) = NKnoten x [tree l,tree r]
 
-- Проверка:
 
Main> tree $ BKnoten (BKnoten (BKnoten (BBlatt 42) 99 (BBlatt 1337)) 22 (BKnoten (BBlatt 100
) 12 (BBlatt 123))) 5000 (BKnoten (BBlatt 180) 13 (BBlatt 2))
 
NKnoten 5000 [NKnoten 22 [NKnoten 99 [NBlatt 42,NBlatt 1337],NKnoten 12 [NBlatt 100,NBlatt 1
23]],NKnoten 13 [NBlatt 180,NBlatt 2]]
2
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
22.05.2017, 16:59  [ТС]
Спасибо!
только единственное что я не понимаю у вас в кодах, это когда вы вот это "$" используете, не понимаю зачем оно... типо "и"...
Цитата Сообщение от Catstail Посмотреть сообщение
Да, на глаз - все верно.
А я вот сомневаюсь в правльности моего кода ко второму дереву...
Haskell
1
2
data NBaum a = NBlatt a | NKnoten a [NBaum a]
  deriving(Eq,Show)
я вот думаю, может так должно оно выглядеть:

Haskell
1
2
3
4
tree2 :: NBaum String
tree2 = NKnoten "Sonne" [NBlatt "Merkur", NBlatt "Venus", NKnoten "Erde" [NBlatt "Mond"],
    NKnoten "Mars", [NBlatt "Phobos" , NBlatt "Deimos"], 
    NKnoten "Jupiter" [NBlatt"IO", NBlatt "Europa", NBlatt "Ganymed", NBlatt "Kalisto"]]
может так? Первая строчка 100% правильна
Потому что NBlatt - это лист, а NKnoten это узел..?
А у меня там везде "NKnoten"
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38175 / 21110 / 4307
Регистрация: 12.02.2012
Сообщений: 34,712
Записей в блоге: 14
22.05.2017, 17:09
Цитата Сообщение от Ellie Tetka Посмотреть сообщение
я вот думаю, может так должно оно выглядеть:
- да, конечно. Солнечная система должна выглядеть именно так. Это я пропустил.
Немецкая "подоплека" с толку сбила.
1
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
22.05.2017, 17:32  [ТС]
хах, ясно)спасибо))

Но код как-бы ведь не должен работать...я имею ввиду, мы же ничего не вводим...и не выводим...а то я пыталась запустить, а у меня ошибочки...

Добавлено через 21 минуту
Цитата Сообщение от Catstail Посмотреть сообщение
Haskell
1
2
3
tree :: BBaum a -> NBaum a
tree (BBlatt x) = NBlatt x
tree (BKnoten l x r) = NKnoten x [tree l,tree r]
тут не должно быть аргументов...можно ли как-то изменить это?

Haskell
1
2
tree :: BBaum a -> NBaum a
tree = ....
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38175 / 21110 / 4307
Регистрация: 12.02.2012
Сообщений: 34,712
Записей в блоге: 14
22.05.2017, 17:46
Цитата Сообщение от Ellie Tetka Посмотреть сообщение
тут не должно быть аргументов...можно ли как-то изменить это?
- тут должны быть аргументы. И код рабочий.

Добавлено через 3 минуты
Цитата Сообщение от Ellie Tetka Посмотреть сообщение
вы вот это "$" используете, не понимаю зачем оно...
- $ - это в Haskell оператор применения функции. Предположим, есть функция f от трех аргументов и функция g от двух. Тогда вызов
f (x y (g x y)) в Haskell можно записать так:

Haskell
1
2
3
4
5
  f x y (g x y)
 
-- или
 
  f x y $ g x y
1
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
22.05.2017, 17:48  [ТС]
я свой код имела ввиду...мой с ошибками, со вторым деревом

Добавлено через 36 секунд
Цитата Сообщение от Catstail Посмотреть сообщение
- $ - это в Haskell оператор применения функции. Предположим, есть функция f от трех аргументов и функция g от двух. Тогда вызов
f (x y (g x y)) в Haskell можно записать так:
HaskellВыделить код
1
2
3
4
5
* f x y (g x y)
-- или
f x y $ g x y
ясно! поняла, спасибо))
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38175 / 21110 / 4307
Регистрация: 12.02.2012
Сообщений: 34,712
Записей в блоге: 14
22.05.2017, 17:49
Цитата Сообщение от Ellie Tetka Посмотреть сообщение
Но код как-бы ведь не должен работать...я имею ввиду, мы же ничего не вводим...и не выводим
- как это - не вводим?

Haskell
1
2
3
4
5
6
7
8
9
-- функция tree применяется к двоичному дереву и возвращает дерево общего вида
 
tree $ BKnoten (BKnoten (BKnoten (BBlatt 42) 99 (BBlatt 1337)) 22 (BKnoten (BBlatt 100
) 12 (BBlatt 123))) 5000 (BKnoten (BBlatt 180) 13 (BBlatt 2))
 
-- ниже результат вызова:
 
NKnoten 5000 [NKnoten 22 [NKnoten 99 [NBlatt 42,NBlatt 1337],NKnoten 12 [NBlatt 100,NBlatt 1
23]],NKnoten 13 [NBlatt 180,NBlatt 2]]
0
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
22.05.2017, 17:50  [ТС]
я не об этом коде говорю...второй мой, с солнечной системой
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38175 / 21110 / 4307
Регистрация: 12.02.2012
Сообщений: 34,712
Записей в блоге: 14
22.05.2017, 17:59
А, там все нормально - константная функция без аргументов.
0
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
22.05.2017, 18:13  [ТС]
и там мы ничего не вводим? так же?

Добавлено через 10 минут
Цитата Сообщение от Ellie Tetka Посмотреть сообщение
Haskell
1
2
3
4
5
6
7
HaskellВыделить код
1
2
3
tree :: BBaum a -> NBaum a
tree (BBlatt x) = NBlatt x
tree (BKnoten l x r) = NKnoten x [tree l,tree r]
а эту же , только наоборот, как сделать..?

Добавлено через 29 секунд
tree :: NBaum a -> BBaum a
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38175 / 21110 / 4307
Регистрация: 12.02.2012
Сообщений: 34,712
Записей в блоге: 14
22.05.2017, 18:53
Лучший ответ Сообщение было отмечено Ellie Tetka как решение

Решение

Цитата Сообщение от Ellie Tetka Посмотреть сообщение
а эту же , только наоборот, как сделать..?
- а вот это преобразование будет неоднозначным. Если потомков больше двух, что делать с остальными? Да и само двоичное дерево надо бы подправить - добавить еще один конструктор - пустой узел.

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
data BBaum a = BNichig | BBlatt a | BKnoten (BBaum a) a (BBaum a) deriving(Eq,Show)
  
data NBaum a = NBlatt a | NKnoten a [NBaum a] deriving(Eq,Show)  
 
b2n :: BBaum a -> NBaum a
 
b2n (BBlatt x) = NBlatt x
b2n (BKnoten l x r) = NKnoten x [b2n l,b2n r]
 
n2b (NBlatt x)          = BBlatt x
n2b (NKnoten x [])      = BBlatt x
n2b (NKnoten x [a])     = BKnoten (n2b a) x BNichig
n2b (NKnoten x (a:b:_)) = BKnoten (n2b a) x (n2b b)
 
-- Проверка:
-- На входе дерево общего вида
 
Main> n2b $ NKnoten 5000 [NKnoten 22 [NKnoten 99 [NBlatt 42,NBlatt 1337],NKnoten 12 [NBlatt
100,NBlatt 23]],NKnoten 13 [NBlatt 180,NBlatt 2]]
 
-- на выходе - двоичное
 
BKnoten (BKnoten (BKnoten (BBlatt 42) 99 (BBlatt 1337)) 22 (BKnoten (BBlatt 100) 12 (BBlatt
23))) 5000 (BKnoten (BBlatt 180) 13 (BBlatt 2)) 
 
Main> n2b $ NKnoten 5000 [NKnoten 22 [NKnoten 99 [NBlatt 42,NBlatt 1337],NKnoten 12 [NBlatt
100,NBlatt 23]],NKnoten 13 [NBlatt 180]] -- сюда добавится пустой узел
 
BKnoten (BKnoten (BKnoten (BBlatt 42) 99 (BBlatt 1337)) 22 (BKnoten (BBlatt 100) 12 (BBlatt
23))) 5000 (BKnoten (BBlatt 180) 13 BNichig)
 
Main> n2b $ NKnoten 5000 [NKnoten 22 [NKnoten 99 [NBlatt 42,NBlatt 1337],NKnoten 12 [NBlatt
100,NBlatt 23]],NKnoten 13 [NBlatt 180, NBlatt 2, NBlatt 222]] -- узел 222 будет отброшен
 
BKnoten (BKnoten (BKnoten (BBlatt 42) 99 (BBlatt 1337)) 22 (BKnoten (BBlatt 100) 12 (BBlatt
23))) 5000 (BKnoten (BBlatt 180) 13 (BBlatt 2))
1
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
22.05.2017, 19:47  [ТС]
ого, как много....

Добавлено через 46 минут
а нет, не так уж и много
спасибо!!!

Добавлено через 4 минуты
Смотрите, у меня указано создать насколько это является возможным, а если невозможно воплотить некоторые данные, то выдать соответствующую ошибку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2017, 19:47
Помогаю со студенческими работами здесь

Сделать так, чтобы функция возвращала как целые, так и дробные значения
Задача: нужно найти среднее арифметическое чисел в одномерном массиве разных типов. В main() у пользователя спрашивается размер...

Как сделать так что я мог умножать не на два числа а на 3,4,5 и так далее?
Вот код: #include <iostream> #include <conio.h> using namespace std; int main(){ float a,c; char b; skip: ...

Так как же сделать так, чтобы Remoting выполнялся в уже существующем на сервере объекте?
Общее описание проблемы Существует Solution, состоящий из сервера, клиента и общей dll-библиотеки. Между клиентом и сервером...

Дописать программу так, чтобы в массив вводились как целые числа так и вещественные
помогите дописать программу так чтобы в массив вводились как целые числа так и вещественные #include <stdio.h> #include...

Что в коде ни так? while не работает так, как ожидаю
Написанный код, как я думаю, должен выдавать цифры от 0 до 1000, столбиком. Но выдает начиная от 702 до 1000. Что ни так понимаю, где...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru