Функциональный язык Funny

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

d_wanderer
Senior
Posts: 180
Joined: 28 Feb 2006 21:34

Post by d_wanderer »

Shaos wrote: Funny должен поддерживть определение не только унарных или бинарных операторов, но и любых n-арных, что даёт возможность городить новый синтаксис с грамматикой поверх существующих...
Хе... Хотел бы я посмотреть на примерчик... Например видоизменить грамматику, на допустим, обратную польскую запись как в смоллтолке... Ну или хотя бы на S-выражения...
d_wanderer
Senior
Posts: 180
Joined: 28 Feb 2006 21:34

Post by d_wanderer »

Shaos wrote:Другая идея насчёт языка - добавить объектно-ориентированность в кортежах, используемых в определении типов данных и функциях, что даст возможность создавать большие объекты без необходимости каждый раз перечислять все поля в правильном порядке.
Хм... А не проще сразу фреймы сделать?
SfS
Doomed
Posts: 491
Joined: 16 Apr 2005 22:35
Location: Томск

Re: Функциональный язык Funny

Post by SfS »

Интересная тема. Но есть некоторые замечания по терминологии.
Shaos wrote: Ленивая интепретация означает,
Термн "ленивый" - это хоть и устоявшийся в определённых кругах термин, но неправильный. Гораздо более правильный термин - "отложенный".

Согласись, что термин "отложенные вычисления" гораздо более понятен, чем "ленивые вычисления" ?

Термин же "ленивый" возник из-за безграмотности технического переводчика, который когда-то где-то буквально перевёл слово lazy, не вникая в смысл текста...

В общем я за то, чтобы термины были понятны :wink:
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Функциональный язык Funny

Post by Shaos »

SfS wrote:Интересная тема. Но есть некоторые замечания по терминологии.
Shaos wrote: Ленивая интепретация означает,
Термн "ленивый" - это хоть и устоявшийся в определённых кругах термин, но неправильный. Гораздо более правильный термин - "отложенный".

Согласись, что термин "отложенные вычисления" гораздо более понятен, чем "ленивые вычисления" ?

Термин же "ленивый" возник из-за безграмотности технического переводчика, который когда-то где-то буквально перевёл слово lazy, не вникая в смысл текста...

В общем я за то, чтобы термины были понятны :wink:
lazy = ленивый

так проще и понятнее ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

d_wanderer wrote:
Shaos wrote: Funny должен поддерживть определение не только унарных или бинарных операторов, но и любых n-арных, что даёт возможность городить новый синтаксис с грамматикой поверх существующих...
Хе... Хотел бы я посмотреть на примерчик... Например видоизменить грамматику, на допустим, обратную польскую запись как в смоллтолке... Ну или хотя бы на S-выражения...
Обратную польскую говришь?... Ну вот например так:

Code: Select all

type polish = push(num)|oper((num,num)->num);

fun eval (list(polish)) -> num
{
 (lp)=evalstack(lp,[]);
}

fun evalstack (list(polish),list(num)) -> num
{
 (empty_list,n::empty_list) = n;
 (push(n)::p,s) = evalstack(p,n::s);
 (oper(f)::p,a::b::s) = evalstack(p,op(b,a)::s);
}

// вариант записи с пролого-подобным конструктором списков [H|T] вместр хоповского ::

fun evalstack (list(polish),list(num)) -> num
{
 ([],[n]) = n;
 ([push(n)|p],s) = evalstack(p,[n|s]);
 ([oper(f)|p],[a,b|s]) = evalstack(p,[op(b,a)|s]);
}
Пример использования: eval([push(1),push(2),push(3),oper(*),oper(+)]) вернёт 7
Я тут за главного - если что шлите мыло на me собака shaos точка net
d_wanderer
Senior
Posts: 180
Joined: 28 Feb 2006 21:34

Post by d_wanderer »

Минутку... Но ведь нотацию объявления функции ты не меняешь. То есть как была нотация определенного ВИДА ВЫРАЖЕНИЯ типа

Code: Select all

FUN name '(' ARG_LIST ')' '{'
EXPT ';'
'}'
То оно так и осталось. Исчезла простота обратной польской записи такой какой она есть в ФОРТЕ и смоллтолке.. Смысла от таких наворотов я не вижу.
Метаязык долджен поддерживать возможность изменения именно ВХОДНОЙ ГРАММАТИКИ. Посмотри на то что сделано в Common Lisp.
Там меняются имено ПРАВИЛА интерпретации символов во входящем потоке. Если хочешь - кину ссылки из Гая Стила.
Это во первых. Во вторых, в какой тип байткода ты собрался его транслировать. Я могу показать (если интересно) что получилось у меня при написании байткода для симпла. Особенно сборка мусора...
Написанная мной ВМ работает дажа на небольших объемах памяти (около 10 Кб).
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

d_wanderer wrote:Минутку... Но ведь нотацию объявления функции ты не меняешь. То есть как была нотация определенного ВИДА ВЫРАЖЕНИЯ типа

Code: Select all

FUN name '(' ARG_LIST ')' '{'
EXPT ';'
'}'
То оно так и осталось. Исчезла простота обратной польской записи такой какой она есть в ФОРТЕ и смоллтолке.. Смысла от таких наворотов я не вижу.
Метаязык долджен поддерживать возможность изменения именно ВХОДНОЙ ГРАММАТИКИ. Посмотри на то что сделано в Common Lisp.
Там меняются имено ПРАВИЛА интерпретации символов во входящем потоке. Если хочешь - кину ссылки из Гая Стила.
Ну можно оператор описать, который будет заменять вызов eval, если в этом загвоздка:

Code: Select all

fun eval_op (polish,list(polish)) -> num
{
 @2000 %1 ~ %2; 
 (p,lp)=evalstack([p|lp],[]);
};

// тот же пример, что в предыдущем моём посте приведён, теперь будет выглядеть так:

push(1) ~ push(2) ~ push(3) ~ oper(*) ~ oper(+)

d_wanderer wrote: Это во первых. Во вторых, в какой тип байткода ты собрался его транслировать. Я могу показать (если интересно) что получилось у меня при написании байткода для симпла. Особенно сборка мусора...
Написанная мной ВМ работает дажа на небольших объемах памяти (около 10 Кб).
Байт код нужен будет для представления структур данных и функциональных преобразователей данных, а интерпретатор этих структур будет нативным (на сях написанным).
Я тут за главного - если что шлите мыло на me собака shaos точка net
bar
Senior
Posts: 185
Joined: 07 Aug 2006 10:18

Post by bar »

Shaos wrote:Я нашёл способ обойти проблему ограничения в виде чистых функций применительно к вводу данных. Напомню что функциональный язык без побочных эффектов запрещает существование функций, возвращающих разные результаты при одних и тех же аргументах, значит никакого ввода данных с клавиатуры и работы с файлами (хотя файлы можно читать если предположить что их содержимое не меняется). Так вот я предлагаю использовать для этого функции возвращающие не отдельный символ, а список ...
насколько я знаю, такой подход к совмещению io и функциональности, некогда использовался в haskell'е. до тех пор, пока они не придумали IOMonad -- концепцию, до которой я так и не допетрил.

зы. а автор знаком с хаскеллом? а то я понять не могу, то ли всё это изобретение велосипеда, то ли мысль глубже чем я вижу...
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

bar wrote:
Shaos wrote:Я нашёл способ обойти проблему ограничения в виде чистых функций применительно к вводу данных. Напомню что функциональный язык без побочных эффектов запрещает существование функций, возвращающих разные результаты при одних и тех же аргументах, значит никакого ввода данных с клавиатуры и работы с файлами (хотя файлы можно читать если предположить что их содержимое не меняется). Так вот я предлагаю использовать для этого функции возвращающие не отдельный символ, а список ...
насколько я знаю, такой подход к совмещению io и функциональности, некогда использовался в haskell'е. до тех пор, пока они не придумали IOMonad -- концепцию, до которой я так и не допетрил.

зы. а автор знаком с хаскеллом? а то я понять не могу, то ли всё это изобретение велосипеда, то ли мысль глубже чем я вижу...
Знаком отчасти, но мне он не сильно симпатичен - там ведь побочные эффекты допустимы - процедурности и императивности слишком много и например сравнение с образцом идёт сверху вниз, а идеальным всё-таки является вариант когда берётся наиболее подходящая конструкция - как в Hope...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
bar wrote: зы. а автор знаком с хаскеллом? а то я понять не могу, то ли всё это изобретение велосипеда, то ли мысль глубже чем я вижу...
Знаком отчасти, но мне он не сильно симпатичен - там ведь побочные эффекты допустимы - процедурности и императивности слишком много и например сравнение с образцом идёт сверху вниз, а идеальным всё-таки является вариант когда берётся наиболее подходящая конструкция - как в Hope...
Решил познакомиться с хаскелом поближе - на аппловском ноуте в дебиане он уже был как стандартный пакет - теперь взялся ставить на свой домашний пц со слакварью - пошёл на haskell.org и взялся было качать самую последнюю версию GHC - 6.6.1. Сюрприз номер один - чтобы собрать хаскел из сырцов нужен уже установленный... хаскел более старой версии!... Ок - идём к бинарным сборкам для линуха. Скачал, развернул - далее установка через configure и make install (как альтернатива - make in-place). Сюрприз номер два - make install где-то зациклился при попытке скопировать либы в /usr/local/lib... Не беда - делаем локальную установку make in-place (сделать рабочим в том месте где лежит) вместо глобальной make install. Вроде всё срослось - однако при запуске интерпретатора не получилось запустить ядро из lib-каталога - сюрприз номер три: у него атрибутов запуска небыло - поправил. Далее оказалось что интерпретатор не может найти свои либы - сюрприз номер четыре: в файле package.conf осталось куча ссылок на /usr/local/lib/... Короче пришлось вручную править. Итог - сыровато будет для серъезного и массового применения. Хотя чeго можно ждать от проекта, который держит сотрудник микрософта?...
Я тут за главного - если что шлите мыло на me собака shaos точка net
bar
Senior
Posts: 185
Joined: 07 Aug 2006 10:18

Post by bar »

Shaos wrote:Решил познакомиться с хаскелом поближе - на аппловском ноуте в дебиане он уже был как стандартный пакет - теперь взялся ставить на свой домашний пц со слакварью - пошёл на haskell.org и взялся было качать самую последнюю версию GHC - 6.6.1. Сюрприз номер один - чтобы собрать хаскел из сырцов нужен уже установленный... хаскел более старой версии!...
[...]
Итог - сыровато будет для серъезного и массового применения.
не знал что всё так сложно. я его собирал исключительно через гентушные портажи. :)
Shaos wrote:Хотя чeго можно ждать от проекта, который держит сотрудник микрософта?...
это ты к чему? типо это плохо законспирированная попытка дискредитировать не-MS?
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

bar wrote:
Shaos wrote:Хотя чeго можно ждать от проекта, который держит сотрудник микрософта?...
это ты к чему? типо это плохо законспирированная попытка дискредитировать не-MS?
Скорее Haskell постепенно превратится во временное явление под названием "функциональный C#" ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

Shaos wrote:Скорее Haskell постепенно превратится во временное явление под названием "функциональный C#" ;)
Так это, вроде там уже все места заняты, есть F# :D
Extreme Entertainment
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Mac Buster wrote:
Shaos wrote:Скорее Haskell постепенно превратится во временное явление под названием "функциональный C#" ;)
Так это, вроде там уже все места заняты, есть F# :D
F# - это другая группа :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

bar wrote:
Shaos wrote:Решил познакомиться с хаскелом поближе - на аппловском ноуте в дебиане он уже был как стандартный пакет - теперь взялся ставить на свой домашний пц со слакварью - пошёл на haskell.org и взялся было качать самую последнюю версию GHC - 6.6.1. Сюрприз номер один - чтобы собрать хаскел из сырцов нужен уже установленный... хаскел более старой версии!...
[...]
Итог - сыровато будет для серъезного и массового применения.
не знал что всё так сложно. я его собирал исключительно через гентушные портажи. :)
Справедливости ради следует сказать что всё вышесказанное относится только к конкретной реализации Haskell под названием GHC - может с другими реализациями не всё так плохо...
Я тут за главного - если что шлите мыло на me собака shaos точка net