Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>>Теперь ответь как способ хранения некоторых данных замыкания влияет на тип функции
FDS>Это тип функции влияет на способ хранения данных замыкания, т.к. в твоём примере FDS>
FDS>(define (cons x y)
FDS>(define (dispatch m)
FDS>(cond ((= m 0) x)
FDS>((= m 1) y)
FDS>(else (error "Argument not 0 or 1 -- CONS" m))))
FDS>dispatch)
FDS>
FDS>именно описатель типа функции cons объявляет (в данном случае полностью) информацию о данных, которые хранятся в замыкании. Т.е. тип функции cons предоставляет инфомацию интерпретатору о том, какие данные нужно хранить в замыкании.
Запиши тип функции cons, как ты его себе представляешь
Здравствуйте, Temoto, Вы писали:
FDS>>>>А другой вопрос мы не обсуждаем, т.к. обсуждается твоё утверждение о том, что декларация типа процедуры не объявляет вообще никакой информации о хранении данных. S>>>Я имел в виду хранение данных а не передачу аргументов. Почувствуй разницу.
FDS>>Передача аргументов и есть хранение данных — этих самых аргументов. Об этом и спор — при определении типа функции определяется способ передачи аргументов, т.е. способ их хранения при передаче.
T>Он говорил о том, что функция f = 15 хранит число 15. И это число можно получить посредством вызова функции.
И? Я понимаю о чём он говорит, и странно, что ты не понимаешь, о чём говорю я. Не важно, что хранит сама функция, важно лишь то, что объявление функции ничуть не меньше, чем объявление типа, предоставляет нам информацию о хранении некоторых данных (аргументов функции, адерса возврата, адреса самой функции)
Утверждать, что объявление функции не предоставляет нам никакой информации о хранении данных примерно то же самое, что утверждать, что object a нам тоже не представляет никакой информации о хранении данных. При этом этот object может хранить кучу всего разного, но факт того, что данные об этом разном не содержаться в объявлении object a никак не умаляют того факта, что объявление object a содержит информацию о хранении данных, которую использует компилятор.
С определением функции точно так же: она может возвращать лишь заголовок некоторого списка, но это не значит, что объявление функции не содержит данных о хранении некоторой информации, просто она не содержит данных именно о формате списка.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, FDSC, Вы писали:
FDS>>Здравствуйте, samius, Вы писали:
S>>>Запиши тип функции cons, как ты его себе представляешь
FDS>>(cons x y)
S>остряк, браво!
Ну ладно, если понятней object * object -> object
Короче говоря, функция, которая принимает кортеж из двух переменных — это есть её тип
FDS>>>Передача аргументов и есть хранение данных — этих самых аргументов. Об этом и спор — при определении типа функции определяется способ передачи аргументов, т.е. способ их хранения при передаче.
T>>Он говорил о том, что функция f = 15 хранит число 15. И это число можно получить посредством вызова функции.
FDS>И? Я понимаю о чём он говорит, и странно, что ты не понимаешь, о чём говорю я. Не важно, что хранит сама функция, важно лишь то, что объявление функции ничуть не меньше, чем объявление типа, предоставляет нам информацию о хранении некоторых данных (аргументов функции, адерса возврата, адреса самой функции)
FDS>Утверждать, что объявление функции не предоставляет нам никакой информации о хранении данных примерно то же самое, что утверждать, что object a нам тоже не представляет никакой информации о хранении данных. При этом этот object может хранить кучу всего разного, но факт того, что данные об этом разном не содержаться в объявлении object a никак не умаляют того факта, что объявление object a содержит информацию о хранении данных, которую использует компилятор. FDS>С определением функции точно так же: она может возвращать лишь заголовок некоторого списка, но это не значит, что объявление функции не содержит данных о хранении некоторой информации, просто она не содержит данных именно о формате списка.
То ли речь идёт о какой-то тонкой разнице в терминах...
То ли вот, допустим есть функция
elem :: List a -> Int -> a
, которая возвращает элемент списка по индексу. Применим частичную аппликацию:
elem_12 = elem [1,2]
. Тип функции elem_12 :: Int -> Int ничего не говорит нам о том, что она хранит список. Объявление функции не содержит данных о хранении некоторой информации (списке).
Никто не утверждал, что объявление функции вообще никакой информации не содержит. (это как раз проблемы с квантором общности или как там) Он утверждал, что объявление функции не содержит информации о данных, хранящихся в замыкании.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>>>>Запиши тип функции cons, как ты его себе представляешь
FDS>>>(cons x y)
FDS> FDS>Ну ладно, если понятней object * object -> object FDS>Короче говоря, функция, которая принимает кортеж из двух переменных — это есть её тип
FDS>именно описатель типа функции cons объявляет (в данном случае полностью) информацию о данных, которые хранятся в замыкании. Т.е. тип функции cons предоставляет инфомацию интерпретатору о том, какие данные нужно хранить в замыкании.
Теперь прокомментируй это, только подумай, не мог ли я сохранить a и b в файл и оставить в замыкании путь к файлу?
Здравствуйте, Temoto, Вы писали:
T>Никто не утверждал, что объявление функции вообще никакой информации не содержит. (это как раз проблемы с квантором общности или как там) Он утверждал, что объявление функции не содержит информации о данных, хранящихся в замыкании.
Объявление функции содержит информацию о данных в замыкании, так как само замыкание невозможно без декларации функции.
Кроме этого, он как раз утверждал, что объявление функции вообще не содержит информации о данных.
Смотри, какая разница
struct cons
{
object * x;
object * y;
}
или
(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 с замыканием не содержит информации о списке, т.е. совершенно эквивалентны, т.к. содержат только информацию о структуре пары (x, y) — в одном случае кортеж (x, y) определяется как структура с полями, в другом — как аргумент функции, при этом этот кортеж хранится в лексическом замыкании и определяя замыкание мы определяем, что этот кортеж будет хранится.
samius считает, что есть разница, но где? Её не видно — и там, и там для одной и той же структуры данных (списка, например) определяются одни и те же кортежи/структуры и информация представлена при объявлении функций точно такая же, как и при объявлении типа структуры.
Так где же тогда различие, объявляем мы тип данных как структуру или через лексическое замыкание?
Здравствуйте, Temoto, Вы писали:
T>Никто не утверждал, что объявление функции вообще никакой информации не содержит. (это как раз проблемы с квантором общности или как там) Он утверждал, что объявление функции не содержит информации о данных, хранящихся в замыкании.
Все верно, но я не только замыкание имел в виду. Тип IO (a, b) не говорит нам о том, откуда извлекаются данные (a,b). Они могли храниться в замыкании, или в файле, чей хэндл хранится в замыкании.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, FDSC, Вы писали:
FDS>>Здравствуйте, samius, Вы писали:
S>>>>>Запиши тип функции cons, как ты его себе представляешь
FDS>>>>(cons x y)
FDS>> FDS>>Ну ладно, если понятней object * object -> object FDS>>Короче говоря, функция, которая принимает кортеж из двух переменных — это есть её тип S>
FDS>именно описатель типа функции cons объявляет (в данном случае полностью) информацию о данных, которые хранятся в замыкании. Т.е. тип функции cons предоставляет инфомацию интерпретатору о том, какие данные нужно хранить в замыкании.
S>Теперь прокомментируй это, только подумай, не мог ли я сохранить a и b в файл и оставить в замыкании путь к файлу?
Мог, и что? То же самое можно сделать и при описании объектного типа: я делаю два свойства определённого типа и приватный путь к файлу. Однако и в описании этого типа я не описываю формат файла. И при описании лексического замыкания, и при описании объекта мне придётся:
1. Где-то хранить путь к файлу
2. Определять так или иначе поля a и b
3. Читать данные из файла, при этом формат файла никак ни там, ни там не определяется
Т.е. в обоих случаях я определяю абсолютно равное количество информации о полях a и b и файле, независимо от того, использую я функцию или объекты со свойствами или методами-акцессорами.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, Temoto, Вы писали:
T>>Никто не утверждал, что объявление функции вообще никакой информации не содержит. (это как раз проблемы с квантором общности или как там) Он утверждал, что объявление функции не содержит информации о данных, хранящихся в замыкании.
S>Все верно, но я не только замыкание имел в виду. Тип IO (a, b) не говорит нам о том, откуда извлекаются данные (a,b). Они могли храниться в замыкании, или в файле, чей хэндл хранится в замыкании.
Тип
class IO
{
property a
{...}
property b
{...}
private fileName;
}
так же ничего не говорит нам о том, откуда извлекаются данные — данные извлекаются в методах доступа как угодно: из поля, из файла, вычисляются, получаются по сети и т.п.
Кроме этого, само определение функции cons x y говорит, что данные хранятся в памяти. Если определение будет другое, то это будет говорить о том, что данные хранятся по другому, т.е. если
class IO
{
property a
{...}
property b
{...}
private fileName;
}
то
(define (cons fileName) ...)
а если
class IO
{
property a
{return _a;}
property b
{return _b;}
private _a;
private _b;
}
то
(define (cons _a _b) ...)
Т.е. в зависимости от того, как именно мы храним данные, меняются и объявления класса, и объявления функции, из которой происходит возврат замыкания — и там, и там хранятся одни и те же данные
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, Temoto, Вы писали:
T>>Никто не утверждал, что объявление функции вообще никакой информации не содержит. (это как раз проблемы с квантором общности или как там) Он утверждал, что объявление функции не содержит информации о данных, хранящихся в замыкании.
FDS>Объявление функции содержит информацию о данных в замыкании, так как само замыкание невозможно без декларации функции. FDS>Кроме этого, он как раз утверждал, что объявление функции вообще не содержит информации о данных.
Хватит меня переиначивать. Я писал:
Очевидно, что процедура имеет тип, но этот тип ничего не говорит компилятору/интерпретатору о способе хранения данных.
Тип, а не объявление
FDS>И объявление структуры cons, и объявление функции cons с замыканием не содержит информации о списке, т.е. совершенно эквивалентны, т.к. содержат только информацию о структуре пары (x, y) — в одном случае кортеж (x, y) определяется как структура с полями, в другом — как аргумент функции, при этом этот кортеж хранится в лексическом замыкании и определяя замыкание мы определяем, что этот кортеж будет хранится.
FDS>samius считает, что есть разница, но где? Её не видно — и там, и там для одной и той же структуры данных (списка, например) определяются одни и те же кортежи/структуры и информация представлена при объявлении функций точно такая же, как и при объявлении типа структуры.
Выдумываешь тезисы за меня, ну-ну...
FDS>Так где же тогда различие, объявляем мы тип данных как структуру или через лексическое замыкание?
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>>Здравствуйте, FDSC, Вы писали:
FDS>>>Ну ладно, если понятней object * object -> object FDS>>>Короче говоря, функция, которая принимает кортеж из двух переменных — это есть её тип S>>
FDS>именно описатель типа функции cons объявляет (в данном случае полностью) информацию о данных, которые хранятся в замыкании. Т.е. тип функции cons предоставляет инфомацию интерпретатору о том, какие данные нужно хранить в замыкании.
S>>Теперь прокомментируй это, только подумай, не мог ли я сохранить a и b в файл и оставить в замыкании путь к файлу?
FDS>Мог, и что? То же самое можно сделать и при описании объектного типа: я делаю два свойства определённого типа и приватный путь к файлу. Однако и в описании этого типа я не описываю формат файла. И при описании лексического замыкания, и при описании объекта мне придётся: FDS>1. Где-то хранить путь к файлу FDS>2. Определять так или иначе поля a и b FDS>3. Читать данные из файла, при этом формат файла никак ни там, ни там не определяется FDS>Т.е. в обоих случаях я определяю абсолютно равное количество информации о полях a и b и файле, независимо от того, использую я функцию или объекты со свойствами или методами-акцессорами.
На бис: и как это отражено в object * object -> object?
Здравствуйте, samius, Вы писали: S>Нет статической, значит есть динамическая. А подразумевать-то конечно можно.
Для повышения уровня философичности беседы предлагаю вспомнить, что типизация затрагивает как объекты, так и их наименования в программе.
Re[22]: Объявления типов: функциональная и ОО парадигмы
Здравствуйте, samius, Вы писали:
FDS>>Объявление функции содержит информацию о данных в замыкании, так как само замыкание невозможно без декларации функции. FDS>>Кроме этого, он как раз утверждал, что объявление функции вообще не содержит информации о данных.
S>Хватит меня переиначивать. Я писал: S>
S>Очевидно, что процедура имеет тип, но этот тип ничего не говорит компилятору/интерпретатору о способе хранения данных.
S>Тип, а не объявление
Я и говорю про тип и никого не переиначиваю. Объявление функции и объявляет её тип. Если ты не способен понять, что говоря про декларацию функции я говорю именно про декларацию её типа, то не надо на меня за это ругаться — я в этом не виноват.
Именно тип функции содержит информацию о данных в замыкании, а не что-то иное в её объявлении. Именно тип функции используется для того, чтобы определить тип кортежа, который будет хранится в лексическом замыкании.
Тип функции cons содержит данные о том, что хранится в лексическом замыкании dispatch, именно тип этой функции указывает компилятору что хранится, абсолютно как если бы мы указали определение структуры и операцию new вместо вызова cons
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>>Здравствуйте, Temoto, Вы писали:
T>>>Никто не утверждал, что объявление функции вообще никакой информации не содержит. (это как раз проблемы с квантором общности или как там) Он утверждал, что объявление функции не содержит информации о данных, хранящихся в замыкании.
S>>Все верно, но я не только замыкание имел в виду. Тип IO (a, b) не говорит нам о том, откуда извлекаются данные (a,b). Они могли храниться в замыкании, или в файле, чей хэндл хранится в замыкании.
FDS>Тип
FDS>
FDS>class IO
FDS>{
FDS> property a
FDS> {...}
FDS> property b
FDS> {...}
FDS> private fileName;
FDS>}
FDS>
FDS>так же ничего не говорит нам о том, откуда извлекаются данные — данные извлекаются в методах доступа как угодно: из поля, из файла, вычисляются, получаются по сети и т.п.
Вот об этом я и писал, нконец-то до тебя дошло. Не прошло и двухсот постов...
FDS>Кроме этого, само определение функции cons x y говорит, что данные хранятся в памяти. Если определение будет другое, то это будет говорить о том, что данные хранятся по другому, т.е. если
Определение? Я утверждал про тип, а не про определение.
FDS>Т.е. в зависимости от того, как именно мы храним данные, меняются и объявления класса, и объявления функции, из которой происходит возврат замыкания — и там, и там хранятся одни и те же данные
А типы могут оставаться неизменными. МОГУТ!!! и НЕ ВСЕ ТИПЫ!!! Это на всякий случай..
Здравствуйте, samius, Вы писали:
S>Здравствуйте, FDSC, Вы писали:
FDS>>Здравствуйте, samius, Вы писали:
S>>>Здравствуйте, FDSC, Вы писали:
FDS>>>>Ну ладно, если понятней object * object -> object FDS>>>>Короче говоря, функция, которая принимает кортеж из двух переменных — это есть её тип S>>>
FDS>именно описатель типа функции cons объявляет (в данном случае полностью) информацию о данных, которые хранятся в замыкании. Т.е. тип функции cons предоставляет инфомацию интерпретатору о том, какие данные нужно хранить в замыкании.
S>>>Теперь прокомментируй это, только подумай, не мог ли я сохранить a и b в файл и оставить в замыкании путь к файлу?
FDS>>Мог, и что? То же самое можно сделать и при описании объектного типа: я делаю два свойства определённого типа и приватный путь к файлу. Однако и в описании этого типа я не описываю формат файла. И при описании лексического замыкания, и при описании объекта мне придётся: FDS>>1. Где-то хранить путь к файлу FDS>>2. Определять так или иначе поля a и b FDS>>3. Читать данные из файла, при этом формат файла никак ни там, ни там не определяется FDS>>Т.е. в обоих случаях я определяю абсолютно равное количество информации о полях a и b и файле, независимо от того, использую я функцию или объекты со свойствами или методами-акцессорами.
S>На бис: и как это отражено в object * object -> object?
я отписался, как это делается на примере кода.
В частности, object * object -> object никакого отношения к хранению в файле не имеет Там сигнатура object -> object, т.к. ты в замыкании будешь хранить лишь имя файла — так это там и отражается
S>Споришь сам с собой теперь
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, samius, Вы писали: S>>Нет статической, значит есть динамическая. А подразумевать-то конечно можно. MC>Для повышения уровня философичности беседы предлагаю вспомнить, что типизация затрагивает как объекты, так и их наименования в программе.
Да, "затрагивает" — хороший термин.
10 Dim IntValue = 0
20 IntValue = "хаха!"
Но я бы предпочел "некоторым образом влияет"
Re[23]: Объявления типов: функциональная и ОО парадигмы
Здравствуйте, FDSC, Вы писали:
FDS>Именно тип функции содержит информацию о данных в замыкании, а не что-то иное в её объявлении. Именно тип функции используется для того, чтобы определить тип кортежа, который будет хранится в лексическом замыкании.
Ну вот, опять.
FDS>Тип функции cons содержит данные о том, что хранится в лексическом замыкании dispatch, именно тип этой функции указывает компилятору что хранится, абсолютно как если бы мы указали определение структуры и операцию new вместо вызова cons
Покажи, как тип функции cons содержит данные о том что хранится в замыкании dispatch.
Напомню, ты привел следующий тип: object*object -> object
FDS>samius считает, что есть разница, но где? Её не видно — и там, и там для одной и той же структуры данных (списка, например) определяются одни и те же кортежи/структуры и информация представлена при объявлении функций точно такая же, как и при объявлении типа структуры. FDS>Так где же тогда различие, объявляем мы тип данных как структуру или через лексическое замыкание?
Хорошо, лично я для себя понял точку зрения обоих сторон. А ещё, что вам (обоим) интереснее продолжать спорить, нежели придти к соглашению.