|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.01.2014, 18:31 | #101 | ||||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Цитата:
Цитата:
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 25.01.2014 в 18:45. |
||||
25.01.2014, 19:24 | #102 | ||||||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Цитата:
Уже все написано! Цитата:
При отсутствии зависимости по данным [f(x1), f(x2), f(x3)] - элементы списка можно вычислить в любом порядке или параллельно. При ленивости length [1, x*x, 1/0, ln 0, product [1..]] - вернет 5, не вычисляя того что внутри списка, зачем, если требуется только узнать размер? Алгоритмы обычно записываются в виде однозначной последовательности действий, но это является излишним, т.к. последовательно легко достигается за счет зависимости по данным, и независимые по данным части алгоритма можно вычислять в любом порядке или параллельно. Например при вычислении корней квадратного уравнения не имеет значения какой корень посчитать первым, т.к. для вычисления одного не требуется знания другого. Цитата:
1. Что такое стандартная схема программы и как сравнивать между собой эти схемы 2. Чем конечные автоматы лучше машины Тьюринга 3. Чем сети Петри лучше конечных автоматов. 4. Почему ООП нельзя считать равноправным расширением структурного программированиям ... Цитата:
Цитата:
Цитата:
|
||||||
25.01.2014, 19:41 | #103 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Цитата:
Примеры реального мира тут не прокатят как не крутите, для всего есть причина и есть следствие. следствие = f(причина). Всё можно выразить в подобной функциональной зависимости. Последний раз редактировалось Kostia; 25.01.2014 в 19:45. |
|
25.01.2014, 19:49 | #104 | ||||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Цитата:
Цитата:
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
||||
25.01.2014, 20:31 | #105 | |||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Цитата:
c1 = getChar(); // тут программа попросит вас ввести символ c2 = getChar(); // тут уже нет c1 = getChar(1); // тут программа попросит вас ввести символ c2 = getChar(2); // тут тоже c3 = getChar(1); // тут нет =) Собственно для решения этой проблемы можно придумать что-то типа переменной Мир. [c1, Мир2] = getChar(Мир1); [c2, Мир3] = getChar(Мир2); [c3, Мир4] = getChar(Мир3); [c4, Мир5] = getChar(Мир3); //тут спрашивать не будет, с3 == с4 С какого угла на это не смотреть, получим что мир меняется, сам или под действие функции, значения не имеет, оно нам только говорит о том, что мир после ввода/вывода уже не такой как "вчера", а значит ф. getChar может возвращать любые значения, ведь вызывается она всегда с разными аргументами. Автоматизировать этот процесс можно самыми разными способами, но в Хаскеле для этого решили использовать монады. Единственный грязный момент тут это инициализация IO, тут нужно принять как данность что Мир, при каждом запуске программы разный, поэтому getChar может возвращать разные значения даже если стартануть программу в одних и тех же условиях. Поэтому даже функции ввода/вывода можно считать чистыми, т.к. они вызываются всегда с разными аргументами ) и меняю Мир(создают новый из старого =)). То самое значение мира берется от main. Отсюда и очевидно разделение, если взять Мир неоткуда, то и использовать IO функции нельзя, это можно назвать естественным разделением чистого кода от грязного. Одна IO функция может вызвать другую IO функцию или чистую функцию, но читая не может вызвать IO функцию, т.к. в ней нет Мира ) Некоторые языки позволяют помечать чистые функции ключевым слово pure, тогда на нее накладываются все присущие таким функциям ограничения и проверяются в момент компиляции. Но в отношении к Хаскелю, там все функции являются такими. Цитата:
Цитата:
Последний раз редактировалось Kostia; 25.01.2014 в 20:57. |
|||
25.01.2014, 21:16 | #106 | ||
МегаМодератор
СуперМодератор
Регистрация: 27.11.2012
Сообщений: 5,657
|
Из Викибука:
Цитата:
Цитата:
Ну да, специального синтаксиса нет, не считая удваивания числа типов (и пресловутый return). Можно было бы, конечно, ничего не изобретать, но я склонен полагать, что это, наверное, слишком трудно, просто взять и нагрузить компилятор полезной работой. Как было бы тру в контексте названия данной темы: Абсолютно идентичный синтаксис и типы данных, никаких монад и return, компиль точно определяет какие функции - грязные и за грязную игру кроет программиста грязным матом. А вообще хватило бы и оттенка цвета шрифта в ИДЕ. Но я осознаю, что от такой системы кодирования не минует батхёрт
Благими намерениями устлана дорога на programmersforum.ru
Последний раз редактировалось MihalNik; 25.01.2014 в 21:28. |
||
25.01.2014, 22:27 | #107 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Цитата:
Код:
Код:
А если вернуть к теме, то Хаскель позволяет определять свои операторы. Например в нем нет тернарного оператора, но его можно определить. Можно определить оператор для задания дробей, хотя он уже определен(Data.Ratio): 1 + 5 % 222 = 227 % 222 1%3 + 5%14 = 29 % 42 Автоматический вывод функций, например если определить дерево: data BinTree a = Empty | Node a (BinTree a) (BinTree a) deriving (Show) Задать его: tree = Node 0 (Node 1 Empty Empty) (Node 2 Empty Empty) и вывести, то получим: Node 0 (Node 1 Empty Empty) (Node 2 Empty Empty) Не красиво, то можно и свою show определить ), так выводить можно многие функции. Например если к определению добавить требование Eq, будет выведена функция сравнения деревьев: Код:
tree2 == tree2 -> True В комплекте ко всему идет хороший менеджер пакетов cabal, который и загрузит расширение, и компильнет его под вашу систему, и установит ) Много интересного написано в "Жемчужины проектирования алгоритмов. Функциональный подход." |
|
25.01.2014, 22:54 | #108 | |
МегаМодератор
СуперМодератор
Регистрация: 27.11.2012
Сообщений: 5,657
|
То есть монады просто лишняя каша
Цитата:
Вот почему-то в Python'е необязательно
Благими намерениями устлана дорога на programmersforum.ru
Последний раз редактировалось MihalNik; 25.01.2014 в 22:58. |
|
25.01.2014, 23:40 | #109 | |||||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Еще добавлю про автовывод Read
Код:
Из строки получили дерево. Сериализация чтоб её ) При этом очень интересно получается, в ::BinTree(Int) Int можно было бы не указывать, если дальше работа с деревом производилась бы как с BinTree(Int). Простой пример: Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
|||||
25.01.2014, 23:53 | #110 |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
Как в функциональных языках хранятся значения без изменяемых переменных? Например виндовый calc.exe где мы сначала вводим 2, калькулятор запоминает, затем +, калькулятор и это запоминает, потом 3, калькулятор всё это запоминает. А мы потом можем всё это дело сосчитать.
P.S. похоже на программисткое порно. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вопросик самым опытным :-) | Doholyan | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 25.08.2009 17:13 |
Проблема с синтаксисом? | Geddar | PHP | 1 | 30.06.2008 16:44 |
Казус с синтаксисом???... | Sota | Общие вопросы C/C++ | 6 | 17.07.2007 19:15 |