Re[4]: Смысл функционального программирования?
От: dimgel Россия https://github.com/dimgel
Дата: 29.04.15 12:30
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>согласен — в асме были переходы, в С циклы, в хаскеле — формулы. какой тебе вариант понятней — асмовский, сишный или


BZ>fac 0 = 1

BZ>fac n = n*fac(n-1)

BZ>?


Смотря что считать понятностью. Если задавать вопросы "как это работает?", "насколько это эффективно?", "а что такое хвостовя рекурсия?" — то циклы таки-попонятнее будут.
Re[3]: Смысл функционального программирования?
От: Evgeny.Panasyuk Россия  
Дата: 29.04.15 12:33
Оценка:
Здравствуйте, Kernighan, Вы писали:

K>А где тут ЯВУ, а где ассемблер?

K>Можно ли назвать ЯВУ язык, в котором даже циклов нет? (трольфейс)

В ASM есть инструкция с говорящим именем loop
Re[4]: Смысл функционального программирования?
От: Evgeny.Panasyuk Россия  
Дата: 29.04.15 12:39
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>согласен — в асме были переходы, в С циклы, в хаскеле — формулы. какой тебе вариант понятней — асмовский, сишный или

BZ>fac 0 = 1
BZ>fac n = n*fac(n-1)
BZ>?

Какой вариант тебе понятней? Императивное вычисление чисел Фибоначчи? Или "функциональный хэллоуворлд" (c)
Автор: Klapaucius
Дата: 20.01.14

fibs = fix $ (1:) . (1:) . (zipWith (+) <*> tail)
?
Re[5]: Смысл функционального программирования?
От: neFormal Россия  
Дата: 29.04.15 12:40
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>>>P.S. AFAIK, в ФП считается хорошем тоном НЕ использовать лямбды:

F>>WAT
EP>

EP>http://rsdn.ru/forum/decl/5350211.1


K>>ФП — это комбинирование комбинаторов как основной способ решения задач программирования, а не "я тут как-то раз фильтр использовал вместо цикла".


не смотри на хакселистов. они ещё и не такое скажут.

F>>а как без них?

EP>Комбинирование комбинаторов полно по Тьюрингу. Смотри например SKI, Unlambda:

это если они есть в языке.

EP>Pointfree в том числе именно об этом — лямбды либо принимают какие-то параметры, либо захватывают. Pointfree же о том, чтобы вообще не использовать никакие параметры.


и там же автор пишет "не превращайте код в нечитабельное говно своим pointfree-фаназизмом".
это не серебрянная пуля. это скорее маленьках синтаксическая хитрость, которая позволяет сделать код в некоторых случаях читабельней.
...coding for chaos...
Re[4]: Смысл функционального программирования?
От: Kernighan СССР  
Дата: 29.04.15 12:41
Оценка: 4 (1)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Здравствуйте, Kernighan, Вы писали:


K>>А где тут ЯВУ, а где ассемблер?

K>>Можно ли назвать ЯВУ язык, в котором даже циклов нет? (трольфейс)

EP>В ASM есть инструкция с говорящим именем loop


Ну, да. Digital в своё время даже на С долгое время не переходила,
потому что у неё был настолько хороший Макроассемблер.
Re[4]: Смысл функционального программирования?
От: dimgel Россия https://github.com/dimgel
Дата: 29.04.15 12:41
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

K>>А где тут ЯВУ, а где ассемблер?

K>>Можно ли назвать ЯВУ язык, в котором даже циклов нет? (трольфейс)

EP>В ASM есть инструкция с говорящим именем loop


Она как, это что же теперь получается, асм в яву записали?
Re[5]: Смысл функционального программирования?
От: BulatZiganshin  
Дата: 29.04.15 12:44
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Какой вариант тебе понятней? Императивное вычисление чисел Фибоначчи? Или


fib 0 = 1
fib 1 = 1
fib n = fib(n-1) + fib(n-2)

а тебе?
Люди, я люблю вас! Будьте бдительны!!!
Re[4]: Смысл функционального программирования?
От: cures Россия cures.narod.ru
Дата: 29.04.15 12:48
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>В ASM есть инструкция с говорящим именем loop


А ещё есть (были?) loadsb, stosb. Но это не настоящий ассемблер
Они теперь всё это на лету переделывают в настоящий ассемблер, на чём наверняка что-то теряют.
А у остальных (RISC) такого никогда и не было.
Re[6]: Смысл функционального программирования?
От: Evgeny.Panasyuk Россия  
Дата: 29.04.15 13:00
Оценка:
Здравствуйте, neFormal, Вы писали:

EP>>>>P.S. AFAIK, в ФП считается хорошем тоном НЕ использовать лямбды:

F>>>WAT
EP>>

EP>>http://rsdn.ru/forum/decl/5350211.1


K>>>ФП — это комбинирование комбинаторов как основной способ решения задач программирования, а не "я тут как-то раз фильтр использовал вместо цикла".

F>не смотри на хакселистов. они ещё и не такое скажут.

Они давно распробовали и комбинаторы и лямбды, и в результате отдают предпочтение комбинаторам. Почему бы не принять во внимание их мнение?

F>>>а как без них?

EP>>Комбинирование комбинаторов полно по Тьюрингу. Смотри например SKI, Unlambda:
F>это если они есть в языке.

А в каком ФП языке их нет?
Я даже на C++ реализовывал
Автор: Evgeny.Panasyuk
Дата: 24.01.14
"функциональный хэллоуворлд" (c) показанный выше:
gentoo fibs # tail -n 6 main.cpp && clang++ main.cpp -std=c++1y -stdlib=libc++ && echo _____ && ./a.out
int main()
{
   auto fibs = fix(cons(0) * cons(1) * (zipWith(sum) <ap> tail));
   auto x = fibs <at> 101;
   cout << x << endl;
}
_____
573147844013817084101


EP>>Pointfree в том числе именно об этом — лямбды либо принимают какие-то параметры, либо захватывают. Pointfree же о том, чтобы вообще не использовать никакие параметры.

F>и там же автор пишет "не превращайте код в нечитабельное говно своим pointfree-фаназизмом".
F>это не серебрянная пуля. это скорее маленьках синтаксическая хитрость, которая позволяет сделать код в некоторых случаях читабельней.

Я же сказал что pointfree это "хороший тон", а не руководство к действию.
Re[7]: Смысл функционального программирования?
От: neFormal Россия  
Дата: 29.04.15 13:07
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Они давно распробовали и комбинаторы и лямбды, и в результате отдают предпочтение комбинаторам. Почему бы не принять во внимание их мнение?


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

F>>это если они есть в языке.

EP>А в каком ФП языке их нет?

EP>Я же сказал что pointfree это "хороший тон", а не руководство к действию.


хороший тон в ФП? нет, это хороший тон в х-е, потому что не все языки поддерживают ЧП.
...coding for chaos...
Re[6]: Смысл функционального программирования?
От: Evgeny.Panasyuk Россия  
Дата: 29.04.15 13:15
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

EP>>Какой вариант тебе понятней? Императивное вычисление чисел Фибоначчи? Или

BZ>fib 0 = 1
BZ>fib 1 = 1
BZ>fib n = fib(n-1) + fib(n-2)

Эта наивная реализация requires O(fib n) additions В то время как в наивной итеративной версии будет линейное количество сложений.

BZ>а тебе?


Во-первых хакелисты считают каноничной другую версию.
Во-вторых итеративную версию можно объяснить ребёнку, который даже складывать не умеет — через линейку и циркуль. А вот на счёт рекурсивной версии (не говоря уже об каноничной) я так не уверен
Отредактировано 29.04.2015 13:15 Evgeny.Panasyuk . Предыдущая версия .
Re[5]: Смысл функционального программирования?
От: Evgeny.Panasyuk Россия  
Дата: 29.04.15 13:22
Оценка:
Здравствуйте, cures, Вы писали:

EP>>В ASM есть инструкция с говорящим именем loop

C>А ещё есть (были?) loadsb, stosb. Но это не настоящий ассемблер
C>Они теперь всё это на лету переделывают в настоящий ассемблер, на чём наверняка что-то теряют.

Я кстати не помню чтобы компилятор вставлял loop — везде был явный счётчик и условный переход.
Re[4]: Смысл функционального программирования?
От: Kernighan СССР  
Дата: 29.04.15 13:23
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, Kernighan, Вы писали:


K>>Можно ли назвать ЯВУ язык, в котором даже циклов нет? (трольфейс)


BZ>согласен — в асме были переходы, в С циклы, в хаскеле — формулы. какой тебе вариант понятней — асмовский, сишный или


BZ>fac 0 = 1

BZ>fac n = n*fac(n-1)

Ну мне понятнее сишный.
Получается, что функциональные языки по степени своей высокоуровневости стоят где-то рядом с процедурными, а не выше их.
Кстати, факториал на С тоже пишется в две строчки (можно даже в одну).
Re[5]: Смысл функционального программирования?
От: Mamut Швеция http://dmitriid.com
Дата: 29.04.15 13:51
Оценка:
BZ>>fac 0 = 1
BZ>>fac n = n*fac(n-1)

K>Ну мне понятнее сишный.


При том, что это — практически прямая математическая запись? Ну-ну.

K>Получается, что функциональные языки по степени своей высокоуровневости стоят где-то рядом с процедурными, а не выше их.


Нет, не получается.


dmitriid.comGitHubLinkedIn
Re[6]: Смысл функционального программирования?
От: Kernighan СССР  
Дата: 29.04.15 13:59
Оценка: +1
Здравствуйте, Mamut, Вы писали:

BZ>>>fac 0 = 1

BZ>>>fac n = n*fac(n-1)

K>>Ну мне понятнее сишный.


M>При том, что это — практически прямая математическая запись? Ну-ну.


Вы так говорите, как будто математическая запись — это хорошо.
В современном мире программистов гораздо больше, чем математиков,
и программирование по большей части решает задачи с математикой
(тем более школьно-формульной математикой) никак не связанные.

K>>Получается, что функциональные языки по степени своей высокоуровневости стоят где-то рядом с процедурными, а не выше их.


M>Нет, не получается.


<сарказм>Аргументированно.</сарказм>
Re[4]: Смысл функционального программирования?
От: alpha21264 СССР  
Дата: 29.04.15 14:02
Оценка: :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Здравствуйте, Kernighan, Вы писали:


K>>А где тут ЯВУ, а где ассемблер?

K>>Можно ли назвать ЯВУ язык, в котором даже циклов нет? (трольфейс)

EP>В ASM есть инструкция с говорящим именем loop


Ну вот видите, даже в ассемблере есть, а в функциональных языках нет.
Какие же они после этого высокоуровневые?

Течёт вода Кубань-реки куда велят большевики.
Re[7]: Смысл функционального программирования?
От: Mamut Швеция http://dmitriid.com
Дата: 29.04.15 14:22
Оценка:
M>>При том, что это — практически прямая математическая запись? Ну-ну.

K>Вы так говорите, как будто математическая запись — это хорошо.


Вообще-то — это очень хорошо.

K>В современном мире программистов гораздо больше, чем математиков,


И подавляющее боьшинство программистов учило математику не только в школе, но и в университете.

K>и программирование по большей части решает задачи с математикой

K>(тем более школьно-формульной математикой) никак не связанные.

А я и не говорил, что они этим занимаются Главная проблема императивщины в том, что она убирает любую декларативность из программирования и за деревьями не видно леса. ФП предлагает возможность описать задачу в терминах «что надо сделать», а не «как это сделать».

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


K>>>Получается, что функциональные языки по степени своей высокоуровневости стоят где-то рядом с процедурными, а не выше их.


M>>Нет, не получается.


K><сарказм>Аргументированно.</сарказм>


Ну настолько же «аргументированно», как и у тебя


dmitriid.comGitHubLinkedIn
Re[6]: Смысл функционального программирования?
От: cures Россия cures.narod.ru
Дата: 29.04.15 14:30
Оценка: 4 (1)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Я кстати не помню чтобы компилятор вставлял loop — везде был явный счётчик и условный переход.


Это потому, что она если и была когда-то эффективней отдельных декремента и условного перехода, то очень давно, во времена 8086. Кстати, с декрементом такая же фигня по сравнению с обычным вычитанием. Их даже отменили в 64-битном режиме, чтобы освободить место для новых инструкций.
Так что можете считать, что инструкции loop в ассемблере нет
Re[8]: Смысл функционального программирования?
От: Evgeny.Panasyuk Россия  
Дата: 29.04.15 14:59
Оценка: +4
Здравствуйте, Mamut, Вы писали:

M>Главная проблема императивщины в том, что она убирает любую декларативность из программирования и за деревьями не видно леса. ФП предлагает возможность описать задачу в терминах «что надо сделать», а не «как это сделать».


Нет, не предлагает. Несмотря на лаконичный синтаксис, это всё равно описание "как это сделать". Например поменяв строчки в примере fac местами — получим stackoverflow.
Причём это "как" зачастую плохо отображается на современные железо. Лаконичный и "типа декларативный" fibs — тормоз
Автор: Evgeny.Panasyuk
Дата: 29.04.15
— именно потому что описывается "как", а не "что." И только потому что описывается "как" приходится знать о таких вещах "как" хвостовая рекурсия, чтобы понимать и иметь возможность переписать через дополнительный acc параметр, убивая изначальную "типа декларативность".
Re[5]: Смысл функционального программирования?
От: Mna 404 and heavy formation
Дата: 29.04.15 15:43
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

I>> Если начать осваивать программирование с процессора, то окажется, что никакого ФП и близко нет, всё насквозь мутабельное.


BZ>а если изучить как физически устроены процессоры то окажется что это чистое ФП, которое протянули через угольное ушко императивности.


Это как??

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

да, у императивной парадигмы такие требования. а что меняет функциональная?

> или изучить как работает человеческая психика и окажется что там есть императивная часть в виде мускулов и желех и ФП-часть

> которая занимается чисто обработкой информации.

мне более понятно представление где вычисляющая система это экспертная система как CLIPS, а не символическая система как Lisp
(об этом хорошо написал Питер Джексон, Введение в экспертные системы в Главе 4; п.4.4. "Почему LISP не является языком представления знаний" )

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

> собой всего лишь одну из многих переменных
в смысле если где-то в физике есть формула то это формула почему-то на лиспе? И почему эта формула не на ФорТране?? ("языке формул"). хотелось бы знать, при чем тут время вообще.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.