nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 17 Apr 2024 18:24



Reply to topic  [ 35 posts ]  Go to page Previous  1, 2, 3  Next
Функциональный язык Funny 
Author Message
Senior

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

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


05 Jul 2007 11:50
Profile
Senior

Joined: 28 Feb 2006 21:34
Posts: 180
Reply with quote
Post 
Shaos wrote:
Другая идея насчёт языка - добавить объектно-ориентированность в кортежах, используемых в определении типов данных и функциях, что даст возможность создавать большие объекты без необходимости каждый раз перечислять все поля в правильном порядке.

Хм... А не проще сразу фреймы сделать?


05 Jul 2007 11:52
Profile
Doomed

Joined: 16 Apr 2005 22:35
Posts: 492
Location: Томск
Reply with quote
Интересная тема. Но есть некоторые замечания по терминологии.

Shaos wrote:
Ленивая интепретация означает,


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

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

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

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


07 Jul 2007 04:43
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22523
Location: Silicon Valley
Reply with quote
SfS wrote:
Интересная тема. Но есть некоторые замечания по терминологии.

Shaos wrote:
Ленивая интепретация означает,


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

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

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

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


lazy = ленивый

так проще и понятнее ;)

_________________
:dj: https://mastodon.social/@Shaos


07 Jul 2007 05:42
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22523
Location: Silicon Valley
Reply with quote
Post 
d_wanderer wrote:
Shaos wrote:
Funny должен поддерживть определение не только унарных или бинарных операторов, но и любых n-арных, что даёт возможность городить новый синтаксис с грамматикой поверх существующих...

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


Обратную польскую говришь?... Ну вот например так:

Code:
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

_________________
:dj: https://mastodon.social/@Shaos


07 Jul 2007 17:22
Profile WWW
Senior

Joined: 28 Feb 2006 21:34
Posts: 180
Reply with quote
Post 
Минутку... Но ведь нотацию объявления функции ты не меняешь. То есть как была нотация определенного ВИДА ВЫРАЖЕНИЯ типа

Code:
FUN name '(' ARG_LIST ')' '{'
EXPT ';'
'}'

То оно так и осталось. Исчезла простота обратной польской записи такой какой она есть в ФОРТЕ и смоллтолке.. Смысла от таких наворотов я не вижу.
Метаязык долджен поддерживать возможность изменения именно ВХОДНОЙ ГРАММАТИКИ. Посмотри на то что сделано в Common Lisp.
Там меняются имено ПРАВИЛА интерпретации символов во входящем потоке. Если хочешь - кину ссылки из Гая Стила.
Это во первых. Во вторых, в какой тип байткода ты собрался его транслировать. Я могу показать (если интересно) что получилось у меня при написании байткода для симпла. Особенно сборка мусора...
Написанная мной ВМ работает дажа на небольших объемах памяти (около 10 Кб).


08 Jul 2007 03:00
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22523
Location: Silicon Valley
Reply with quote
Post 
d_wanderer wrote:
Минутку... Но ведь нотацию объявления функции ты не меняешь. То есть как была нотация определенного ВИДА ВЫРАЖЕНИЯ типа

Code:
FUN name '(' ARG_LIST ')' '{'
EXPT ';'
'}'

То оно так и осталось. Исчезла простота обратной польской записи такой какой она есть в ФОРТЕ и смоллтолке.. Смысла от таких наворотов я не вижу.
Метаязык долджен поддерживать возможность изменения именно ВХОДНОЙ ГРАММАТИКИ. Посмотри на то что сделано в Common Lisp.
Там меняются имено ПРАВИЛА интерпретации символов во входящем потоке. Если хочешь - кину ссылки из Гая Стила.


Ну можно оператор описать, который будет заменять вызов eval, если в этом загвоздка:

Code:
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 Кб).


Байт код нужен будет для представления структур данных и функциональных преобразователей данных, а интерпретатор этих структур будет нативным (на сях написанным).

_________________
:dj: https://mastodon.social/@Shaos


08 Jul 2007 07:50
Profile WWW
Senior

Joined: 07 Aug 2006 10:18
Posts: 185
Reply with quote
Post 
Shaos wrote:
Я нашёл способ обойти проблему ограничения в виде чистых функций применительно к вводу данных. Напомню что функциональный язык без побочных эффектов запрещает существование функций, возвращающих разные результаты при одних и тех же аргументах, значит никакого ввода данных с клавиатуры и работы с файлами (хотя файлы можно читать если предположить что их содержимое не меняется). Так вот я предлагаю использовать для этого функции возвращающие не отдельный символ, а список ...

насколько я знаю, такой подход к совмещению io и функциональности, некогда использовался в haskell'е. до тех пор, пока они не придумали IOMonad -- концепцию, до которой я так и не допетрил.

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


08 Aug 2007 21:01
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22523
Location: Silicon Valley
Reply with quote
Post 
bar wrote:
Shaos wrote:
Я нашёл способ обойти проблему ограничения в виде чистых функций применительно к вводу данных. Напомню что функциональный язык без побочных эффектов запрещает существование функций, возвращающих разные результаты при одних и тех же аргументах, значит никакого ввода данных с клавиатуры и работы с файлами (хотя файлы можно читать если предположить что их содержимое не меняется). Так вот я предлагаю использовать для этого функции возвращающие не отдельный символ, а список ...

насколько я знаю, такой подход к совмещению io и функциональности, некогда использовался в haskell'е. до тех пор, пока они не придумали IOMonad -- концепцию, до которой я так и не допетрил.

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


Знаком отчасти, но мне он не сильно симпатичен - там ведь побочные эффекты допустимы - процедурности и императивности слишком много и например сравнение с образцом идёт сверху вниз, а идеальным всё-таки является вариант когда берётся наиболее подходящая конструкция - как в Hope...

_________________
:dj: https://mastodon.social/@Shaos


08 Aug 2007 21:16
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22523
Location: Silicon Valley
Reply with quote
Post 
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го можно ждать от проекта, который держит сотрудник микрософта?...

_________________
:dj: https://mastodon.social/@Shaos


19 Aug 2007 21:37
Profile WWW
Senior

Joined: 07 Aug 2006 10:18
Posts: 185
Reply with quote
Post 
Shaos wrote:
Решил познакомиться с хаскелом поближе - на аппловском ноуте в дебиане он уже был как стандартный пакет - теперь взялся ставить на свой домашний пц со слакварью - пошёл на haskell.org и взялся было качать самую последнюю версию GHC - 6.6.1. Сюрприз номер один - чтобы собрать хаскел из сырцов нужен уже установленный... хаскел более старой версии!...
[...]
Итог - сыровато будет для серъезного и массового применения.

не знал что всё так сложно. я его собирал исключительно через гентушные портажи. :)

Shaos wrote:
Хотя чeго можно ждать от проекта, который держит сотрудник микрософта?...

это ты к чему? типо это плохо законспирированная попытка дискредитировать не-MS?


27 Aug 2007 05:36
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22523
Location: Silicon Valley
Reply with quote
Post 
bar wrote:
Shaos wrote:
Хотя чeго можно ждать от проекта, который держит сотрудник микрософта?...

это ты к чему? типо это плохо законспирированная попытка дискредитировать не-MS?


Скорее Haskell постепенно превратится во временное явление под названием "функциональный C#" ;)

_________________
:dj: https://mastodon.social/@Shaos


27 Aug 2007 06:17
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
Shaos wrote:
Скорее Haskell постепенно превратится во временное явление под названием "функциональный C#" ;)

Так это, вроде там уже все места заняты, есть F# :D

_________________
Extreme Entertainment


27 Aug 2007 12:32
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22523
Location: Silicon Valley
Reply with quote
Post 
Mac Buster wrote:
Shaos wrote:
Скорее Haskell постепенно превратится во временное явление под названием "функциональный C#" ;)

Так это, вроде там уже все места заняты, есть F# :D


F# - это другая группа :)

_________________
:dj: https://mastodon.social/@Shaos


27 Aug 2007 15:56
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22523
Location: Silicon Valley
Reply with quote
Post 
bar wrote:
Shaos wrote:
Решил познакомиться с хаскелом поближе - на аппловском ноуте в дебиане он уже был как стандартный пакет - теперь взялся ставить на свой домашний пц со слакварью - пошёл на haskell.org и взялся было качать самую последнюю версию GHC - 6.6.1. Сюрприз номер один - чтобы собрать хаскел из сырцов нужен уже установленный... хаскел более старой версии!...
[...]
Итог - сыровато будет для серъезного и массового применения.

не знал что всё так сложно. я его собирал исключительно через гентушные портажи. :)


Справедливости ради следует сказать что всё вышесказанное относится только к конкретной реализации Haskell под названием GHC - может с другими реализациями не всё так плохо...

_________________
:dj: https://mastodon.social/@Shaos


31 Aug 2007 13:50
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 35 posts ]  Go to page Previous  1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 17 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.