Re[5]: Функциональное программирование для всех
От: deniok Россия  
Дата: 24.10.06 09:53
Оценка:
Здравствуйте, Mamut, Вы писали:

M> А ленивость я только в Хаскеле и видел. Идея интересная, но на практике не понятно, как применяемая (для меня непонятная, естессно).


Ну, можно задавать бесконечные конструкции. Например, монтируем бесконечный список простых чисел, используя решето Эратосфена
primes = sieve [2 .. ]   
sieve (x:xs) = x : sieve [y | y <- xs, (y `rem` x) /= 0]

а затем пользуемся необходимым кусочком:
take 10 primes 
-- вернёт [2,3,5,7,11,13,17,19,23,29]

Без "ленивости" обращение к primes вело бы к весьма долгому ожиданию .
Re[5]: Функциональное программирование для всех
От: Quintanar Россия  
Дата: 24.10.06 10:19
Оценка:
Ленивость упрощает логику программы — граничные условия можно опускать.
Вот числа фибоначи, например, можно считать не думая о том, сколько элементов понадобиться и поэтому программа становиться совсем простой:
fib = 1:1:(list_merge (+) fib (tail fib))

list_merge f [a] [b] -> [f a b] — не помню, как в Haskell такая функция называется.
Re[6]: Функциональное программирование для всех
От: Programmierer AG  
Дата: 24.10.06 10:26
Оценка:
Quintanar wrote:
> list_merge f [a] [b] -> [f a b] — не помню, как в Haskell такая функция называется.
zipWith
Posted via RSDN NNTP Server 2.0
Re[6]: Функциональное программирование для всех
От: deniok Россия  
Дата: 24.10.06 10:30
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>list_merge f [a] [b] -> [f a b] — не помню, как в Haskell такая функция называется.


zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
Re[3]: Функциональное программирование для всех
От: deniok Россия  
Дата: 24.10.06 12:12
Оценка: 3 (3) +1
Здравствуйте, VladD2, Вы писали:


VD>Продолжения это вообще мега-фича только вот к ФП в общем-то не относящаяся. В прочем ФП вообще илюзорен. Это набор паттернов кторый можно без проблем применять в ИЯ.


Класс ! Продолжу редукцию:

Программирование вообще иллюзорно. Это набор паттернов, который можно без проблем применять.


VD>Основное достоинство ФЯ заключается в том, что они резко упрощают использование этого стиля.


Ну о том и речь!

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

В чистых ИЯ работа с состояниями — как воздух (никто и не замечает). Зато подпорки нужны для отложенных вычислений.

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

Но у чистых ФЯ есть важная особенность: для них возможны формально-математический анализ и формально-математическое манипулирование. Это приводит к тому, что в их мире рождаются идеи, которые позже внедряются в прочие языки. Яркий пример этого — автоматический вывод типов.
Re[10]: Функциональное программирование для всех
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 25.10.06 12:50
Оценка:
Кодт,

К>Ну почему же. Я искренне недоумевал, зачем привинчивать ФВП в тех местах, где они необязательны. "Когда в моей руке молоток, то всё вокруг кажется гвоздями".

К>Разумеется, бывают ситуации, в которых ФВП существенно упрощают жизнь: да хотя бы обработка последовательностей (большинство из операций можно выразить с помощью fold или foldr) или монадные операции.
К>Но в двух предыдущих примерах...

В двух предыдущих примерах поинт был не в том, чтобы решить ту же задачу на другом языке, а попробовать выразить те же _средства_ для решения той же задачи на другом языке.

Когда мы сравниваем 2 языка на скорость и выбираем некоторый тест, например alphablend, считается некорректным приводить другой алгоритм, не так ли (отбросим философский вопрос о нужности таких сравнений )? А здесь такое же сравнение, только на выразительность.

К>Вот если так сформулировать вопрос: одна и та же задача более-менее равно (по количеству писанины) решается с и без ФВП. Может быть, без ФВП чуть длиннее (не в разы, а в проценты). Какие доводы за то, чтобы выбрать вариант с ФВП?


Меньше сущностей — больше ясность — гармоничнее гармония!
Вместо делегатов, колбасок (callbacks), функторов, эмуляторов лямбд, стратегий, композитов с декораторами использовать только ФВП — разве плохо?

Но если вернуться к разговору о C++... Как мы можем в C++ выбрать вариант с ФВП? Мы можем выбрать вариант с loki:functor, boost:function или своей реализацией function, что нибудь типа
  template<typename Function> // function type R (T1, T2, ..., TN),
  class function 
    : public unary_function<R, T1> // iff N == 1
    : public binary_function<R, T1, T2> // iff N == 2
  {
  public:
    typedef R result_type;
        ...
    R operator()(T1, T2, ..., TN) const;
  };

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

Последний пример.
Можно в принципе подумать как написать на C++ аналог Parsec (или другой библиотеки комбинаторов). Но сомневаюсь, что это будет так же красиво для пользователя. (И сомневаюсь, что будет просто).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[11]: Функциональное программирование для всех
От: Programmierer AG  
Дата: 25.10.06 12:55
Оценка: 1 (1)
> Можно в принципе подумать как написать на C++ аналог Parsec (или другой библиотеки комбинаторов). Но сомневаюсь, что это будет так же красиво для пользователя. (И сомневаюсь, что будет просто).
Ну, это как раз давно есть —
Boost.Spirit.

Само собой, не так же красиво и не так просто .
Posted via RSDN NNTP Server 2.0
Re[4]: Функциональное программирование для всех
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 25.10.06 19:19
Оценка: 1 (1) :)))
Здравствуйте, deniok, Вы писали:

D>Я заранее соглашусь с тем, что для большинства программистов и большинства (но не подавляющего) задач ИЯ — то, что доктор прописал. И что есть весьма симпатичные смешанные языки, и среди них есть очень-очень симпатичный смешанный язык.


Э-э-э... Лисп?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Функциональное программирование для всех
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.06 10:27
Оценка:
Здравствуйте, deniok, Вы писали:

D>Программирование вообще иллюзорно. Это набор паттернов, который можно без проблем применять.


Это уже софистика.

VD>>Основное достоинство ФЯ заключается в том, что они резко упрощают использование этого стиля.


D>Ну о том и речь!


D>В чистых ФЯ легко работать с отложенными вычислениями, полагаясь на прозрачность ссылок и ленивость. Зато для работы с состояниями требуются подпорки. Например, монады.


Во, во. Костыли для исправления извращений мозга.
Реально ленивость в повседневной жизни нужна крайне редко. И где она действительно нужна легко достигается. На то есть всягого рода потоки, итераторы, ссылочные объекты, замыкания... А вот повсеместная ленивость приводит к геморою. Отладка резко усложняется (ести про ее ненужность отавим тем кто никогда не писал сложный код). Компиляция получаеся неполноценной (код тормозит). Незнаю уж связано ли это слинивостью (думаю — да), но повяляются всякого рода монады и другие извращения резко усложняющие понимание казалось бы простых вещей.

Если поглядить на реалии жизни, то вдино, что большинство те же ФЯ не являются линивыми, а так называемые "чистые" ФЯ реально на практике используются крайне редко (и вообще пратически ограничиваются Хаскелем).

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

D>Я заранее соглашусь с тем, что для большинства программистов и большинства (но не подавляющего) задач ИЯ — то, что доктор прописал. И что есть весьма симпатичные смешанные языки, и среди них есть очень-очень симпатичный смешанный язык.


Это тут не причем. Меня всегда радовал тот радикализм и извращение фактов которые используются при пропагадне (другого слова не подберу) ФЯ. Вот стериотип о том что ФЯ == линивые вычисления и что линивые вычисления это несомненное достоинство как раз проявление этого. Достаточно включить логику и немного удалиться от веры в слова проповедников, чтобы понять, что линивость всего лишь свойство языка. Не более, и не менее. От него есть польза, а есть вред. Далее не составит труда понять, что те кто отказываается от линивости просто считают вред куда большим нежели пользу.

D>Но у чистых ФЯ есть важная особенность: для них возможны формально-математический анализ и формально-математическое манипулирование. Это приводит к тому, что в их мире рождаются идеи, которые позже внедряются в прочие языки. Яркий пример этого — автоматический вывод типов.


Чущь это. Опять же инсперированная рекламными лозунгами пропагаднистов ФЯ. Формальные методы анализа есть для любоко ЯП. Более того любоая программа может быть переписана с ФС в ИС и обратно. Вся разница заключается в возможности изменить пременную. Это несомненно несколько усложняет анализ программ, но отнюдь не делает его невозможным.

Господа, разуйте глаза. Лучшие оптимзирующие компиляторы созданы для императивных языков самого низкого качества — С, С++ и Фортрана. В них не только есть побочные эффекты, но и ужасные указатели в сочетении с goto. И как не странно они лидеры в генерации высокопроизводительного кода.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Функциональное программирование для всех
От: deniok Россия  
Дата: 26.10.06 13:26
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Это тут не причем. Меня всегда радовал тот радикализм и извращение фактов которые используются при пропагадне (другого слова не подберу) ФЯ. Вот стериотип о том что ФЯ == линивые вычисления и что линивые вычисления это несомненное достоинство как раз проявление этого. Достаточно включить логику и немного удалиться от веры в слова проповедников, чтобы понять, что линивость всего лишь свойство языка. Не более, и не менее. От него есть польза, а есть вред. Далее не составит труда понять, что те кто отказываается от линивости просто считают вред куда большим нежели пользу.


Где те проповедники, которые утверждали, что "ФЯ == линивые вычисления"? Давай вместе на них набросимся . Если уж тебе нужен лозунг для оспаривания, то пожалуйста:

ФП — это отсутствие побочных эффектов.

D>>Но у чистых ФЯ есть важная особенность: для них возможны формально-математический анализ и формально-математическое манипулирование. Это приводит к тому, что в их мире рождаются идеи, которые позже внедряются в прочие языки. Яркий пример этого — автоматический вывод типов.


VD>Чущь это. Опять же инсперированная рекламными лозунгами пропагаднистов ФЯ. Формальные методы анализа есть для любоко ЯП. Более того любоая программа может быть переписана с ФС в ИС и обратно. Вся разница заключается в возможности изменить пременную. Это несомненно несколько усложняет анализ программ, но отнюдь не делает его невозможным.


Ага. Только в чистых ФЯ формальные методы анализа максимально просты с математической точки зрения. Алгоритм Милнера проверки типа, например, мог родится только в мире ФП. Сейчас автоматический вывод типов внедряется в другие языки (в той или иной степени усечённости). Так что речь идёт не о рекламных лозунгах, а об исторических фактах.
Re[6]: Функциональное программирование для всех
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.06 14:34
Оценка:
Здравствуйте, deniok, Вы писали:

D>Где те проповедники, которые утверждали, что "ФЯ == линивые вычисления"?


Они везде. Оглянись. То тут, то там постоянно слышишь, о ленивости как о приемуществе ФП.

D>Давай вместе на них набросимся .


Присоеденяйся. Я этим занимаюсь последние два года.

D>Если уж тебе нужен лозунг для оспаривания, то пожалуйста:


Мне не нужны лозунги. Но их ахинею я слушать не намерен.

D>ФП — это отсутствие побочных эффектов.


Это тоже ахинея. Весь смысл работы компьютеров — это побочные эффекты. И любой ЯП содержит средсва для их организации. Как в прочем почти любой язык позволят писать программы без них.

Так что разумно будте сказать, что ФП — это стиль программирования в котором предпочтительным является минимизация побочных эффектов.

D>Ага. Только в чистых ФЯ формальные методы анализа максимально просты с математической точки зрения.


Скажем так "выглядт проще". Но это ни на что не влияет. Если уж так подумать, то проще всего анализировать программу на БрэйнФаке. Но что с того толку?

D>Алгоритм Милнера проверки типа, например, мог родится только в мире ФП.


С чего бы это? Очередной пример неверной логики.

D>Сейчас автоматический вывод типов внедряется в другие языки (в той или иной степени усечённости).


Это алгоритм Милнера скорее усеченный. Что и позволило реализовать его на старом железе и без невероятных затрат. Вот только это опять таки ничего не говорит.

Кстати, напомню, что этот самый алгоритм применяется в ОКамле — гибридном языке поддерживающем ИП.

D>Так что речь идёт не о рекламных лозунгах, а об исторических фактах.


Речь идет о грубейщих ошибках в логике. Неумении делать примитивные логические выводы. И в отвроенном притягивании аргументов за ущи.

Большинство фанатов ФЯ защищающих их даже не могут сойтись во мнении по вопросу что же такое ФЯ. Для одних это отсуствие модификации перменных, другие притягивают сюда ленивость, и т.д., и т.п. Так что остается только передать горячий привет Элрангу, Лиспу и всем клонам ML-я которые никак не подпадают под их определение.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Функциональное программирование для всех
От: deniok Россия  
Дата: 26.10.06 16:15
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


D>>Где те проповедники, которые утверждали, что "ФЯ == линивые вычисления"?


VD>Они везде. Оглянись. То тут, то там постоянно слышишь, о ленивости как о приемуществе ФП.


Это свойство. Легко реализуемое, благодаря отсутствию побочных эффектов.

VD>Так что разумно будте сказать, что ФП — это стиль программирования в котором предпочтительным является минимизация побочных эффектов.


OK. Согласен в практическом аспекте.

D>>Алгоритм Милнера проверки типа, например, мог родится только в мире ФП.


VD>С чего бы это? Очередной пример неверной логики.


В мире ИЯ идея полностью автоматического вывода не возникала, поскольку
// C++
void do_smth(PolymorficBaseType& p)
{
    // какой тип имеет объект р?

    SomeType s("Вася", 33); // догадается без SomeType ?

    unsigned int q = 3; // догадается без unsigned int ?
}

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

D>>Сейчас автоматический вывод типов внедряется в другие языки (в той или иной степени усечённости).


VD>Это алгоритм Милнера скорее усеченный. Что и позволило реализовать его на старом железе и без невероятных затрат. Вот только это опять таки ничего не говорит.


Не мучай термин "усечённый". Алгоритм Милнера естественно расширяют, чтобы довести до практической реазизации в конкретном языке. Я же, применяя этот термин, имел в виду, что в чистом ФЯ допустим полностью автоматический статический вывод типов. В ИЯ и смешанных языках есть ситуации, где тип указывать необходимо.
Re[8]: Функциональное программирование для всех
От: VoidEx  
Дата: 26.10.06 23:32
Оценка:
Здравствуйте, deniok, Вы писали:

D>В мире ИЯ идея полностью автоматического вывода не возникала, поскольку

D>
D>// C++
D>void do_smth(PolymorficBaseType& p)
D>{
D>    // какой тип имеет объект р?

D>    SomeType s("Вася", 33); // догадается без SomeType ? // А что мешает догадаться? Вот чисто теоретически

D>    unsigned int q = 3; // догадается без unsigned int ? // Аналогично
D>}
D>
Re[9]: Функциональное программирование для всех
От: deniok Россия  
Дата: 27.10.06 04:40
Оценка: -1
Здравствуйте, VoidEx, Вы писали:

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


D>>В мире ИЯ идея полностью автоматического вывода не возникала, поскольку

D>>
D>>// C++
D>>void do_smth(PolymorficBaseType& p)
D>>{
D>>    // какой тип имеет объект р?

D>>    SomeType s("Вася", 33); // догадается без SomeType ? // А что мешает догадаться? Вот чисто теоретически

D>>    unsigned int q = 3; // догадается без unsigned int ? // Аналогично
D>>}
D>>


Ты смайлик не забыл?
Если нет, догадывайся, каков тип q:
// auto предлагается в C++0x использовать для указания того, что тип выводится автоматически
// ниже, конечно, псевдо-С++: 
auto foo()
{
    auto q(7, 22.3); 
    return q;
}


То есть ответ-то есть: тип с конструктором cons(int,double). Только что с этим обобщённым типом потом делать? Это не шаблонная (в смысле template) обобщенность.
Re[8]: Функциональное программирование для всех
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.10.06 07:59
Оценка:
Здравствуйте, deniok, Вы писали:

D>Это свойство. Легко реализуемое, благодаря отсутствию побочных эффектов.


Попробуй доказать, что это свойство не реализуется в языках с побочными эффектами.
Так же попробуй объяснить почему в чисто императивных языках вроде C# или Ruby прекрасно работают в полностью ленивом режиме такие вещи как итераторы и континюэшоны.

Вот если сможешь это доказать и объяснить, то можно будте о чем-то поговориь. А так как доказать это физически невомзожно, то предлагаю больше не поторять это ошибочное мнение.


D>В мире ИЯ идея полностью автоматического вывода не возникала,


Идея вообще возникла только в ограниченом числе языков. Факт что есть языки с побочными эффектами выводящие типы. Так что это очередное свидетелство неверной логики.

D>поскольку

D>
D>// C++
D>void do_smth(PolymorficBaseType& p)
D>{
D>    // какой тип имеет объект р?

D>    SomeType s("Вася", 33); // догадается без SomeType ?

D>    unsigned int q = 3; // догадается без unsigned int ?
D>}
D>


Извни, ты точно понимаешь принципы вывода типов или просто слылаш о Хндли-Миллере?
Если написать:

def do_smth(p)
{
  def s("Вася", 33)
  def q = 3;
}

то ни один супер язык не выведет типы верно. И С++ тут не причем. В этом коде банально нехватает информации.


D>(и это не только из-за фич С++ ).


Что "это"?

D> Поскольку идея оказалась хороша, дизайн современных языков, где её хотят использовать делают таким, чтобы вывод типов был допустим в максимальном числе мест.


Извини, но с этим высказыванием даже спорить нельзя. Нет ни одного языка с выводом типов который смог бы выводить типы в любых ситуациях. Все они имеют необязательное аннотирование типов. Проблематичность же и сложность вывода типов зависить исключительно от сложности системы типов и мудрености алгоритма. Хиндли-Миллер очень примитивна система типов потому она и позволяет отностилеьно лекго выводить типы. При этом она вводит море ограничений. НО!!! Она не имеет к функциональному программированию никакого отношения. Без каких либо проблем можно построить императивный язык с этой ситемой типов. Собственно ОКамл, например, яляется иммеративным языком. В нем есть возможность менять переменные. И система типов ему никак н мешает.

В общем, потрудись обосновать и это заявление. Уверен, что и это не удастся.

D>Я же, применяя этот термин, имел в виду, что в чистом ФЯ допустим полностью автоматический статический вывод типов. В ИЯ и смешанных языках есть ситуации, где тип указывать необходимо.


Обоснуй.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Функциональное программирование для всех
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.10.06 08:02
Оценка:
Здравствуйте, deniok, Вы писали:

D>Ты смайлик не забыл?

D>Если нет, догадывайся, каков тип q:
D>
D>// auto предлагается в C++0x использовать для указания того, что тип выводится автоматически
D>// ниже, конечно, псевдо-С++: 
D>auto foo()
D>{
D>    auto q(7, 22.3); 
D>    return q;
D>}
D>


D>То есть ответ-то есть: тип с конструктором cons(int,double). Только что с этим обобщённым типом потом делать? Это не шаблонная (в смысле template) обобщенность.


Пример, на любом ФЯ приведи где тебя компилятор не пошлет.

Это же просто обсурд что ты говришь!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Функциональное программирование для всех
От: ie Россия http://ziez.blogspot.com/
Дата: 27.10.06 08:02
Оценка:
Здравствуйте, deniok, Вы писали:

D>Если нет, догадывайся, каков тип q:

D>
D>auto foo()
D>{
D>    auto q(7, 22.3); 
D>    return q;
D>}
D>


Если не отрывать от контекста использования, то вполне можно догадаться.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[8]: Функциональное программирование для всех
От: Кодт Россия  
Дата: 27.10.06 08:44
Оценка: 1 (1) +1
Здравствуйте, deniok, Вы писали:

D>В мире ИЯ идея полностью автоматического вывода не возникала, поскольку

D>
D>// C++
D>void do_smth(PolymorficBaseType& p)
D>{
D>    // какой тип имеет объект р?

D>    SomeType s("Вася", 33); // догадается без SomeType ?

D>    unsigned int q = 3; // догадается без unsigned int ?
D>}
D>

D>(и это не только из-за фич С++ ). Поскольку идея оказалась хороша, дизайн современных языков, где её хотят использовать делают таким, чтобы вывод типов был допустим в максимальном числе мест.

В С++ свой подход к типизации, однонаправленный (т.е., зная тип аргументов, можно вывести тип результата).
К императивности отношения не имеет вообще. Хотя бы потому, что этот подход распространяется и на язык шаблонов (чисто декларативный), в котором вообще царит утиная типизация.

Почему в С++ типизация однонаправленная, а не двунаправленная (Хиндли-Милнера), или не вообще утиная? Ну вот так исторически оказалось удобнее. Причём заметь: не компилятору удобнее, а программисту: дешёвый полиморфизм без головной боли даже об арности. (Упражнение: напишите на *ML printf не в виде макроса, а в виде функции. Замучаетесь и обломитесь!)
В Лиспе типизация утиная, а ведь тоже ФЯ...
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[7]: Функциональное программирование для всех
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 27.10.06 09:22
Оценка: 12 (1) +4 :)))
VladD2,

D>>Давай вместе на них набросимся .

VD>Присоеденяйся. Я этим занимаюсь последние два года.

О, да, известный Борец-С-Ветряными-Мельницами.
В чём смысл борьбы то? Борьба с неверными () али движение за мировое господство "ТхеРигхтТхинга" ()?

В принципе я бы мог потратить время и ответить подробно, с примерами и пояснениями (btw, строгого доказательства в принципе сделать невозможно, поскольку речь идёт о человеке и вопрос "легче/труднее" часто субъективен и неформален), почему с ростом сложности систем сложность реализации ленивых вычислений в условиях mutable state растёт экспоненциально, но увы, после таких доводов

VD>... Чущь это...
VD>... Это тоже ахинея.

легко экстраполируется результат "дискуссии".

Так что приходится выбирать из двух зол
а эту ветку сохранить как техническое обсуждение контента данной статьи. Я выбираю второй путь, а поговорить про "рулит ленивость или нет" можно как-нибудь потом в философии — там самое место, имо.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[9]: Функциональное программирование для всех
От: Кодт Россия  
Дата: 27.10.06 09:44
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Если написать:

VD>def do_smth(p)
VD>{
VD>  def s("Вася", 33)
VD>  def q = 3;
VD>}

VD>то ни один супер язык не выведет типы верно. И С++ тут не причем. В этом коде банально нехватает информации.

Почему же. Хватает. Функция принимает что угодно и ничего не возвращает. Следовательно, do_smth : 'a -> unit
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.