Здравствуйте, lomeo, Вы писали:
L>Хотя, возможно, с практической точки зрения это неудобно. Может быть использовать его как целевой язык? Хотя тут проблемы с тем же fold — как блин вытащить текущее значение, а не уже отфолденный результат, я так и не понял
Так ана- и ката- этого вроде не позволяют. Параморфизм как раз и предназначен, чтобы "eats its argument and keeps it too". Это из первых бананов (которые с конвертами и колючей проволокой).
Здравствуйте, lomeo, Вы писали:
L>Здравствуйте, lomeo, Вы писали:
L>>Так прикол в том, что не надо придумывать отдельные правила
L>s/Так/Там/
Ну вот и вопрос — что удобнее? Явное разделение прям в тексте или по направлению стрелок.
Чисто интуитивно мне кажется, что прямо в тексте лучше, т.к. не надо "дополнительно" заглядывать в домены стрелок.
Хот по сути, насколько я понимаю, решения изоморфны, а интерпретирует человек, поэтому надо с этой стороны "копать"
Здравствуйте, deniok, Вы писали:
D>Здравствуйте, lomeo, Вы писали:
L>>Хотя, возможно, с практической точки зрения это неудобно. Может быть использовать его как целевой язык? Хотя тут проблемы с тем же fold — как блин вытащить текущее значение, а не уже отфолденный результат, я так и не понял
D>Так ана- и ката- этого вроде не позволяют. Параморфизм как раз и предназначен, чтобы "eats its argument and keeps it too". Это из первых бананов (которые с конвертами и колючей проволокой).
Ммм, сорри за ламерский вопрос, но бананы (параморфизм) и позволяют "повышать" уровень языка? (с т.зр. экспрессивности языка и теоремы Гёделя).
P.S. Наверное надо будет перечитать про все эти warm fuzzy things в смысле разные -морфизмы
Здравствуйте, Курилка, Вы писали:
К>Ммм, сорри за ламерский вопрос, но бананы (параморфизм) и позволяют "повышать" уровень языка? (с т.зр. экспрессивности языка и теоремы Гёделя). К>P.S. Наверное надо будет перечитать про все эти warm fuzzy things в смысле разные -морфизмы
Здравствуйте, deniok, Вы писали:
D>Так ана- и ката- этого вроде не позволяют. Параморфизм как раз и предназначен, чтобы "eats its argument and keeps it too". Это из первых бананов (которые с конвертами и колючей проволокой).
Здравствуйте, lomeo, Вы писали:
L>Здравствуйте, Курилка, Вы писали:
К>>Ммм, сорри за ламерский вопрос, но бананы (параморфизм) и позволяют "повышать" уровень языка? (с т.зр. экспрессивности языка и теоремы Гёделя). К>>P.S. Наверное надо будет перечитать про все эти warm fuzzy things в смысле разные -морфизмы
L>бананы — это ката
А, сорри, недопонял смысла написаного, дак а что насчёт параморфизма?
К>Ммм, сорри за ламерский вопрос, но бананы (параморфизм) и позволяют "повышать" уровень языка? (с т.зр. экспрессивности языка и теоремы Гёделя).
Бананы — это ката-.
Линзы — это ана-.
А пара- — это колючая проволока.
Это всё разные примитивы (паттерны) рекурсии. Факториал "естественно" не записать как катаморфизм над Nat = Nil | Succ Nat. Параморфизм как раз об факториало-подобном паттерне.
Здравствуйте, lomeo, Вы писали:
L>Здравствуйте, Курилка, Вы писали:
К>>Ну вот и вопрос — что удобнее? Явное разделение прям в тексте или по направлению стрелок.
L>Видимо, как посмотреть. С практической точки зрения (если рассматривать этот язык как инструмент для широкого применения) явное кажется посимпатичнее.
А какие плюсы у "неявного"? Более общее решение, насколько я понимаю?
Здравствуйте, lomeo, Вы писали:
L>Здравствуйте, deniok, Вы писали:
D>>Так ана- и ката- этого вроде не позволяют. Параморфизм как раз и предназначен, чтобы "eats its argument and keeps it too". Это из первых бананов (которые с конвертами и колючей проволокой).
L>Угу. Проблема в том, что пара- там как раз и нет.
А. Пора свой язык делать?
Здравствуйте, Курилка, Вы писали:
К>Как-то странно, что на РСДН ещё не появилась ссылка о сабже. Там приводится очень интересная работа Тёрнера, раскрывающая тему терминируемости алгоритмов, приводится базовый язык, в котором чётко разделяется data как базис примитивных типов и codata как базис для структурной рекурсии. По сути он говорит, что даже haskell недостаточно строг (формален), т.к. допускает _|_ (bottom), однако эта нестрогость даёт достаточную свободу для решения практических задач, поэтому традиционное ФП он называет слабым, а искомую систему — сильным ФП (аналогично языкам со слабой и сильной системами типов).
Ещё мысль-вопрос в сторону: наличие НФ для терминируемой функции в итоге даёт возможность точно определить время выполнения функции, исходя из известного времени выполнения неких "примитивных" блоков (базиса языка). Я правильно всё понимаю?
Получаем, что фактически нам не нужны гипотетические O(n) становятся и мы можем гарантировать hard real-time, правда со скидкой на производительность и экспрессивность базиса (всёж неполное по Тьюрингу решение выходит)
Здравствуйте, deniok, Вы писали:
D>Здравствуйте, lomeo, Вы писали: L>>Угу. Проблема в том, что пара- там как раз и нет. D>А. Пора свой язык делать?
Вот и вопрос — имеет ли смысл за базис чарити брать?
Всёж подход Тёрнера мне кажется более вменяемым, но можно транслировать его в код на расширенном чарити...
Интерпретатор правда там на Сях
Имхо за базис Хаскель брать стоит его задницы мне более симпатичны
Здравствуйте, deniok, Вы писали:
D>Здравствуйте, Курилка, Вы писали:
К>>Имхо за базис Хаскель брать стоит его задницы мне более симпатичны
D>Мы же, вроде, без задниц хотим. Не Тьюринг-полный, но со вшитыми паттернами для "правильных" рекурсий...
D>Блин, некогда Тернера дочитать, только первую половину прочёл в метро
Вот во второй половине "собака" и "порылась"
Суть в том, что целевой язык нам нужен без задниц, а вот интерпретатор (и компилятор, насколько я понимаю они изоморфны ), не может быть без задниц написан в следствие первой теоремы Гёделя о неполноте.
Это, к примеру причина того, что чарити не на чарити, ну и тех мыслей, что я про бутстраппинг приводил.
Здравствуйте, deniok, Вы писали:
D>Это всё разные примитивы (паттерны) рекурсии. Факториал "естественно" не записать как катаморфизм над Nat = Nil | Succ Nat. Параморфизм как раз об факториало-подобном паттерне.
Потому и написал — с извращением можно, например, сделать
fac n = product [1..n]
и получать текущий элемент при катаморфизме из длины формируемого списка.
Вот написал даже, чтобы оценили уровень извращённости:
rf "PRELUDE.hs".
def to = n => {| zero : () => nil
| succ : x => cons(sub(n, length x), x)
|} n.
def product = l => {| nil : () => one
| cons : (h,t) => mul(h,t)
|} l.
def fac = n => product to n.
Здравствуйте, Курилка, Вы писали:
К>Вот и вопрос — имеет ли смысл за базис чарити брать? К>Всёж подход Тёрнера мне кажется более вменяемым, но можно транслировать его в код на расширенном чарити... К>Интерпретатор правда там на Сях К>Имхо за базис Хаскель брать стоит его задницы мне более симпатичны
В смысле ты собираешься сделать такой язык? Отписывайся тогда плз...