FDS>>Наоборот, я привёл частный случай, когда дополнительная память необходима — а любая это рекурсия или нет — не важно, есть по крайней мере одна рекурсия (например, qsort) где память необходима и, значит, это не есть переход по дереву.
S>Существование частного случая qsort не доказыват тот факт что дополнительная память необходима для всей рекурсии.
А я никогда и не пытался доказать этот факт.
Существование частного случая qsort доказывает тот факт, что есть операции, где вызов функции не может быть представлен как простой переход по AST
Здравствуйте, samius, Вы писали:
S>Существование частного случая qsort не доказыват тот факт что дополнительная память необходима для всей рекурсии. S>Раз это для тебя не очевидно, то я прекращаю спор
Кроме этого вы пропустили другой мой аргумент по поводу того, что всякая рекурсия не является переходом по дереву AST
Здравствуйте, FDSC, Вы писали:
FDS>А другой вопрос мы не обсуждаем, т.к. обсуждается твоё утверждение о том, что декларация типа процедуры не объявляет вообще никакой информации о хранении данных.
Я имел в виду хранение данных а не передачу аргументов. Почувствуй разницу.
Напомню, речь шла о структурах данных и о роли типа в хранении данных. Алтернатива предлагалась — словарь.
S>>>>О 4х байтах может и говорит, но о том в каком месте файла, и вообще в файле ли данные — нет.
FDS>>>И? В процедурных типах вы говорите, что и этих 4-х байтов нет.
S>>Теперь поделись секретом, как ты из моего утверждения сделал такой далекоидущий вывод? Нет, ну интересно просто.
Я имел в виду этот вывод "В процедурных типах вы говорите, что и этих 4-х байтов нет."
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>>Существование частного случая qsort не доказыват тот факт что дополнительная память необходима для всей рекурсии. S>>Раз это для тебя не очевидно, то я прекращаю спор
FDS>Кроме этого вы пропустили другой мой аргумент по поводу того, что всякая рекурсия не является переходом по дереву AST
У вас ярко выраженная проблема с кванторами всеобщности и существования. Пока вы ее не устраните, ваши аргументы меня не интересуют
Здравствуйте, samius, Вы писали:
S>У вас ярко выраженная проблема с кванторами всеобщности и существования. Пока вы ее не устраните, ваши аргументы меня не интересуют
Ну если ты не хочешь спорить и переходишь на личности — мне же лучше, засчитываю себе победу.
А проблема с кванторами у вас, а не у меня, так что устраняйте эту проблему как можно скорее. Для того, чтобы доказать, что утверждение "все вызовы функций являются переходами по дереву AST" мне достаточно привести лишь один пример вызова, который не является переходом, а вовсе не доказывать, что все вызовы не являются таковыми переходами.
А уж то, что на практике все рекурсивные вызовы, не преобразованные в циклы, требуют выделения памяти при каждом вызове — это довесок.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, FDSC, Вы писали:
FDS>>А другой вопрос мы не обсуждаем, т.к. обсуждается твоё утверждение о том, что декларация типа процедуры не объявляет вообще никакой информации о хранении данных. S>Я имел в виду хранение данных а не передачу аргументов. Почувствуй разницу.
Передача аргументов и есть хранение данных — этих самых аргументов. Об этом и спор — при определении типа функции определяется способ передачи аргументов, т.е. способ их хранения при передаче.
S>Напомню, речь шла о структурах данных и о роли типа в хранении данных. Алтернатива предлагалась — словарь.
Ну да, именно. Опеределение типа функции по сути и определяет структуру данных, которая передаётся в эту функцию.
S>Я имел в виду этот вывод "В процедурных типах вы говорите, что и этих 4-х байтов нет."
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>>У вас ярко выраженная проблема с кванторами всеобщности и существования. Пока вы ее не устраните, ваши аргументы меня не интересуют
FDS>Ну если ты не хочешь спорить и переходишь на личности — мне же лучше, засчитываю себе победу.
Да пожалуйста, считай что угодно.
FDS>А проблема с кванторами у вас, а не у меня, так что устраняйте эту проблему как можно скорее. Для того, чтобы доказать, что утверждение "все вызовы функций являются переходами по дереву AST" мне достаточно привести лишь один пример вызова, который не является переходом, а вовсе не доказывать, что все вызовы не являются таковыми переходами.
Приведи только цитату того места, где я сделал утверждение "все вызовы функций являются переходами по дереву AST".
FDS>А уж то, что на практике все рекурсивные вызовы, не преобразованные в циклы, требуют выделения памяти при каждом вызове — это довесок.
Вот выделенное — довесок.
Здравствуйте, FDSC, Вы писали: MC>>Своими словами у меня плохо получается. Лучше почитать про изоморфизм Карри-Ховард FDS>Моё объяснение (чуть выше вашего) имеет с этим что-либо общее?
Да, плюс, еще можно понаблюдать, во что в системах типов превращаются логические операции (коньюнкция, дизъюнкция, импликация) и кванторы — в туплы, ADT, функции (тип).
Здравствуйте, samius, Вы писали:
FDS>>А проблема с кванторами у вас, а не у меня, так что устраняйте эту проблему как можно скорее. Для того, чтобы доказать, что утверждение "все вызовы функций являются переходами по дереву AST" мне достаточно привести лишь один пример вызова, который не является переходом, а вовсе не доказывать, что все вызовы не являются таковыми переходами.
S>Приведи только цитату того места, где я сделал утверждение "все вызовы функций являются переходами по дереву AST".
А может мне лень, как и тебе приводит мои цитаты?
Но все это имеет лишь некоторое отношение к вызову процедур. В общем случае работать со стеком и регистрами может интерпретатор, но вызов процедуры может быть лишь переходом по синтаксическому дереву.
FDS>>А уж то, что на практике все рекурсивные вызовы, не преобразованные в циклы, требуют выделения памяти при каждом вызове — это довесок. S>Вот выделенное — довесок.
Тогда это уже не вызов процедуры, а условный переход и никакого отношения к твоему утверждению он не имеет.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>>Здравствуйте, FDSC, Вы писали:
FDS>>>А другой вопрос мы не обсуждаем, т.к. обсуждается твоё утверждение о том, что декларация типа процедуры не объявляет вообще никакой информации о хранении данных. S>>Я имел в виду хранение данных а не передачу аргументов. Почувствуй разницу.
FDS>Передача аргументов и есть хранение данных — этих самых аргументов. Об этом и спор — при определении типа функции определяется способ передачи аргументов, т.е. способ их хранения при передаче.
А что делать с данными, которые не были переданы? Замыкание получает свои данные не через стек и может хранить их как угодно не взирая на тип функции.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
FDS>>>А проблема с кванторами у вас, а не у меня, так что устраняйте эту проблему как можно скорее. Для того, чтобы доказать, что утверждение "все вызовы функций являются переходами по дереву AST" мне достаточно привести лишь один пример вызова, который не является переходом, а вовсе не доказывать, что все вызовы не являются таковыми переходами.
S>>Приведи только цитату того места, где я сделал утверждение "все вызовы функций являются переходами по дереву AST".
FDS>А может мне лень, как и тебе приводит мои цитаты? FDS>
FDS>Но все это имеет лишь некоторое отношение к вызову процедур. В общем случае работать со стеком и регистрами может интерпретатор, но вызов процедуры может быть лишь переходом по синтаксическому дереву.
Ты уже не можешь отличить "все вызовы функций" от "вызов может быть" ???
FDS>>>А уж то, что на практике все рекурсивные вызовы, не преобразованные в циклы, требуют выделения памяти при каждом вызове — это довесок. S>>Вот выделенное — довесок.
FDS>Тогда это уже не вызов процедуры, а условный переход и никакого отношения к твоему утверждению он не имеет.
Имеет, т.к. это форма рекурсии
Здравствуйте, samius, Вы писали:
S>Здравствуйте, FDSC, Вы писали:
FDS>>Здравствуйте, samius, Вы писали:
FDS>>>>А проблема с кванторами у вас, а не у меня, так что устраняйте эту проблему как можно скорее. Для того, чтобы доказать, что утверждение "все вызовы функций являются переходами по дереву AST" мне достаточно привести лишь один пример вызова, который не является переходом, а вовсе не доказывать, что все вызовы не являются таковыми переходами.
S>>>Приведи только цитату того места, где я сделал утверждение "все вызовы функций являются переходами по дереву AST".
FDS>>А может мне лень, как и тебе приводит мои цитаты? FDS>>
FDS>>Но все это имеет лишь некоторое отношение к вызову процедур. В общем случае работать со стеком и регистрами может интерпретатор, но вызов процедуры может быть лишь переходом по синтаксическому дереву.
S>Ты уже не можешь отличить "все вызовы функций" от "вызов может быть" ???
Если ты имел в виду, что "вызов может быть", то у тебя проблема с логикой (а я думал, что у тебя её нет). Проблема, потому что тогда твой аргумент не имеет никакой силы, т.к. если "может быть", то это означает что интерпретатор всё равно работает на вызовах со стеком, храня в нём аргументы и адрес возврата.
Кроме этого, на самом деле, совершенно не важно, переход это по AST или нет — аргументы всё равно где-то хранятся. Если даже это переход — то мы, декларируя тип функции, определили место в AST, где хранятся аргументы функции, а так же определили место, где хранится сама информация о вызове функции, т.е. всё равно определили способ хранения некоторых данных даже для функции без параметров, которая ничего не делает.
FDS>>>>А уж то, что на практике все рекурсивные вызовы, не преобразованные в циклы, требуют выделения памяти при каждом вызове — это довесок. S>>>Вот выделенное — довесок.
FDS>>Тогда это уже не вызов процедуры, а условный переход и никакого отношения к твоему утверждению он не имеет. S>Имеет, т.к. это форма рекурсии
Нет, условный переход вызовом функции не является.
Здравствуйте, samius, Вы писали:
FDS>>Передача аргументов и есть хранение данных — этих самых аргументов. Об этом и спор — при определении типа функции определяется способ передачи аргументов, т.е. способ их хранения при передаче.
S>А что делать с данными, которые не были переданы? Замыкание получает свои данные не через стек и может хранить их как угодно не взирая на тип функции.
Это не так. Когда мы определяем замыкание, мы определяем место в куче, т.е. структуру, соответствующую функции, где нечто хранится, т.е. определяя замыкание мы вообще указываем не только на передачу аргументов (или их отсутствие), но и указываем способ хранения некоторых данных этого замыкания и формат этих данных (в твоём примере — пара значений)
Здравствуйте, FDSC, Вы писали:
S>>Ты уже не можешь отличить "все вызовы функций" от "вызов может быть" ???
FDS>Если ты имел в виду, что "вызов может быть", то у тебя проблема с логикой (а я думал, что у тебя её нет). Проблема, потому что тогда твой аргумент не имеет никакой силы, т.к. если "может быть", то это означает что интерпретатор всё равно работает на вызовах со стеком, храня в нём аргументы и адрес возврата.
Не силен в демагогии, но я считаю что своим аргументом я опровергнул твой.
FDS>>>Тогда это уже не вызов процедуры, а условный переход и никакого отношения к твоему утверждению он не имеет. S>>Имеет, т.к. это форма рекурсии
FDS>Нет, условный переход вызовом функции не является.
Как и переход по АСТ
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
FDS>>>Передача аргументов и есть хранение данных — этих самых аргументов. Об этом и спор — при определении типа функции определяется способ передачи аргументов, т.е. способ их хранения при передаче.
S>>А что делать с данными, которые не были переданы? Замыкание получает свои данные не через стек и может хранить их как угодно не взирая на тип функции.
FDS>Это не так. Когда мы определяем замыкание, мы определяем место в куче, т.е. структуру, соответствующую функции, где нечто хранится, т.е. определяя замыкание мы вообще указываем не только на передачу аргументов (или их отсутствие), но и указываем способ хранения некоторых данных этого замыкания и формат этих данных (в твоём примере — пара значений)
Теперь ответь как способ хранения некоторых данных замыкания влияет на тип функции
FDS>>>А другой вопрос мы не обсуждаем, т.к. обсуждается твоё утверждение о том, что декларация типа процедуры не объявляет вообще никакой информации о хранении данных. S>>Я имел в виду хранение данных а не передачу аргументов. Почувствуй разницу.
FDS>Передача аргументов и есть хранение данных — этих самых аргументов. Об этом и спор — при определении типа функции определяется способ передачи аргументов, т.е. способ их хранения при передаче.
Он говорил о том, что функция f = 15 хранит число 15. И это число можно получить посредством вызова функции. Но хранит она это число до вызова. Это не имеет отношения к передаче аргументов. Тут речь про хранение данных, про структуры данных в виде функций. Ещё пример: функция add_1 = (+) 1 :: Int -> Int прибавляет к числу единицу. add_1 2 = 3. add_1 хранит единицу. Эту единицу можно "извлечь" с помощью add_1 0.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, FDSC, Вы писали:
S>>>Ты уже не можешь отличить "все вызовы функций" от "вызов может быть" ???
FDS>>Если ты имел в виду, что "вызов может быть", то у тебя проблема с логикой (а я думал, что у тебя её нет). Проблема, потому что тогда твой аргумент не имеет никакой силы, т.к. если "может быть", то это означает что интерпретатор всё равно работает на вызовах со стеком, храня в нём аргументы и адрес возврата.
S>Не силен в демагогии, но я считаю что своим аргументом я опровергнул твой.
В демагогии ты как раз силён.
Ты не опровергнул мой аргумент и вообще занимаешься сейчас троллингом.
Тип функции в любом случае определяет информацию о месте для хранения парамтеров, не важно, как именно мы это место представляем — где-то эти параметры всегда хранятся, даже если сделать такое AST, на котором сразу можно будет выполнять какие-то программы, мы всё равно где-то будем хранить аргументы функции и то место (точнее, его формат), где будем хранить, будет определятся в частности и типом функции.
FDS>>>>Тогда это уже не вызов процедуры, а условный переход и никакого отношения к твоему утверждению он не имеет. S>>>Имеет, т.к. это форма рекурсии
FDS>>Нет, условный переход вызовом функции не является. S>Как и переход по АСТ
Ты споришь или хулиганишь? Если споришь — спорь, если нет — не надо ничего писать.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, FDSC, Вы писали:
FDS>>Здравствуйте, samius, Вы писали:
FDS>>>>Передача аргументов и есть хранение данных — этих самых аргументов. Об этом и спор — при определении типа функции определяется способ передачи аргументов, т.е. способ их хранения при передаче.
S>>>А что делать с данными, которые не были переданы? Замыкание получает свои данные не через стек и может хранить их как угодно не взирая на тип функции.
FDS>>Это не так. Когда мы определяем замыкание, мы определяем место в куче, т.е. структуру, соответствующую функции, где нечто хранится, т.е. определяя замыкание мы вообще указываем не только на передачу аргументов (или их отсутствие), но и указываем способ хранения некоторых данных этого замыкания и формат этих данных (в твоём примере — пара значений)
S>Теперь ответь как способ хранения некоторых данных замыкания влияет на тип функции
Это тип функции влияет на способ хранения данных замыкания, т.к. в твоём примере
(define (cons x y)
(define (dispatch m)
(cond ((= m 0) x)
((= m 1) y)
(else (error "Argument not 0 or 1 -- CONS" m))))
dispatch)
именно описатель типа функции cons объявляет (в данном случае полностью) информацию о данных, которые хранятся в замыкании. Т.е. тип функции cons предоставляет инфомацию интерпретатору о том, какие данные нужно хранить в замыкании.