ФлеймФорумПрограммирование

Специальная олимпиада №1 (6 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#75
16:38, 14 фев 2014

=A=L=X=
> что за языки такие где игрек-комбинатор востребован
Уж если в крестах он не востребован, уж в схемке то точно он не особо нужен.
http://ideone.com/vQWhYn

#include <iostream>
#include <functional>
using namespace std;

//fix :: (a -> a) -> a
//fix f = let x = f x in x
//fac = fix $ \f n -> if (n <= 0) then 1 else n * f (n - 1)
//fac = let f n = if (n <= 0) then 1 else n * f (n - 1) in f
//===========================================================
 
 

//fac = let f n = if (n <= 0) then 1 else n * f (n - 1) in f
int fac(int n)
{
  /*let*/ function<int(int)> f = [&](int n){ if (n <= 0) return 1; else return n * f (n - 1);}; /*in*/
  return f(n);
}

int main() {
  cout<<fac(5)<<endl;
  return 0;
}
#76
16:39, 14 фев 2014

=A=L=X=
хотя я полистал интернет...
letrec разворачивается как раз через Y комбинатор
либо с использованием мутабельности, так что да разница с хаскелем есть
но... тут есть одно важное замечание

let в хаскеле это не letrec
это let

а работает он изза ленивости языка

результат не вычисляется пока не нужен
к примеру

в хаскеле будет работать

let x = 1:x in x

и можно даже из получившегося бесконечного списка взять сотый элемент

(let x = 1:x in x)!!100
#77
16:43, 14 фев 2014

laMer007
> Уж если в крестах он не востребован, уж в схемке то точно он не особо нужен.
ненене
стоп это сравнение бред
конструирование объекта на стеке это ни разу не связывание имени

#78
16:43, 14 фев 2014

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

#79
16:47, 14 фев 2014

cNoNim
> конструирование объекта на стеке это ни разу не связывание имени
Ох тыж беда какая. Производительность точно просядет. Думаю придётся прикупить сеть распределенных сервачков для хранения на стеке одного function для одного факториала.

#80
16:51, 14 фев 2014

laMer007
> Ох тыж беда какая. Производительность точно просядет

Да не о том речь.

var x = lamba (y) { ...x ... };

всегда везде было возможно
а вот попробуй:

func( x );

в этом выражении x заменить на факториал от икс не меняя код снаружи скобок.
P.S.
В С++, кстати, это уже обсуждали в той теме про комбинатор, вообще то, если бы лямбды полностью пошли по пути шотката над функтором до конца, то проблемы бы тоже не было, ибо обычный функтор без труда вызывает сам себя как (*this)(...); без какого либо гвоздя и изменения синтаксиса. Но в лямбдах this зарезервировали под другие нужды и поэтому вроде бы попали на те же грабли.

#81
16:58, 14 фев 2014

=A=L=X=
> это всегда везде было возможно без У-комбинатора
Ну тогда мы выяснили что У-комбинатор по сути не нужен. Вымышленный приём применительно к промышленному программированию.

> x заменить на факториал от икс не меняя код снаружи скобок
Что-ж. Это явно задача для специальной олимпиады. Посоны со двора явно оценят это. Согласен.

#82
17:05, 14 фев 2014

laMer007
> Что-ж. Это явно задача для специальной олимпиады. Посоны со двора явно оценят
> это. Согласен.

>Специальная олимпиада №1 (6 стр)
:)

#83
17:09, 14 фев 2014

cNoNim
> :)
Как раз кода буду создавать очередную Специальная олимпиада №2, то у меня у же будет задание от =A=L=X=.

Специальная Олимпиада (Special Olympics) — международная организация, занимающаяся вопросами организации спортивных мероприятий для лиц с умственными отклонениями.

#84
17:23, 14 фев 2014

laMer007
> Ну тогда мы выяснили что У-комбинатор по сути не нужен.

Да вообще функции не нужны. Машина Тьюринга уже полна по Тьюрингу. Чего боле то?

#85
17:30, 14 фев 2014

=A=L=X=
> Да вообще функции не нужны. Машина Тьюринга уже полна по Тьюрингу. Чего боле то?
Такое же раздувание до уровня маразма, как и Y-combinator. Не делайте на частном выводе общий вывод. А тем более на одном.

#86
17:36, 14 фев 2014

laMer007
> Такое же раздувание до уровня маразма, как и Y-combinator.

Да чё сразу маразм то? Откуда столько негатива? Безобидный приёмчик, неужели какие то проблемы?
Да и к тому же примеры применения как раз простые - тут как с шаблонами, заправил адову шаблонно-макросовую простыню в boost::function, а снаружи даже пользоваться можно!

#87
0:07, 15 фев 2014

=A=L=X=
> Безобидный приёмчик
Ну заодно и бесполезный, как мы выяснили.

#88
13:50, 15 фев 2014

=A=L=X=
> Расскажи это на пару месяцев назад поднятом примере:
> http://habrahabr.ru/post/118927/
это вчера меня лишило сна, не надо так

пример на Scala кстати:

def fix[A,B](f: (A=>B)=>(A=>B)): A=>B = f(fix(f))(_)
val fact = fix[Int,BigInt](f => a => if(a<=0) 1 else f(a-1) * a)
fact(12)
#89
19:00, 15 фев 2014

итт языковые астронавты

Страницы: 1 2 3 4 5 6 7 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.