LINUX.ORG.RU

Чистота. Что-то тут не так.

 , ,


0

2

Любопытная аналогия между ФП функциями, и математическими дробями.

Кагда мы пишем, например две дроби, например, для простоты, 1/2 и 1/2, мы абстрагируемся от оъектов, от которых мы их берем. Например, опять же для простоты, возьмем листы бумаги. Совершенно непонятно, например, идет ли здесь речь о разных листах или об одном? Одинаковые листы это или разные. Отсюда следует, что мы не можем просто так сложить эти дроби, не конкретизировав, сначала, о чем речь.

Для ФП, такой конкретизацией является общий контекст замыканий - в простом случае - глобальная область видимости. Пока все норм. Идем дальше.

Реальные приложения, это как известно, не застывшие раз и на всегда глыбы (даже глыбы иногда ломаются, да), а динамика. Значит, то что было когда то а=foo, станет a=bar. Программе все равно придется взаимодействовать с внешним миром.

Если у нас есть присваивания, мы поступим очень просто - перезапишем значение a в глобале.

Что же тогда становится с иммутабельныи замыканиями? Насколько я понимаю, единственный выход тут, полностью скопировать их и перезаписать все имена a. А что же тогда делать со старыми замыканиями? Выкинуть на помойку? Понятно, что если нам необходим возврат к старому состоянию, да, это нужно. И мы, тащемта, при таком подходе, всегда, вообще, можем вернуться к любому состоянию, это cool, никто не спорит. Но в остальных то случаях, мы получаем громадный перерасход памяти, и больше них-я?



Последнее исправление: anonimous (всего исправлений: 2)
Ответ на: комментарий от sleepflint

Да ладно, звездатым-то ничего не будет. А остальные тут за членов сего сообщества не считаются

vonenij
()
Ответ на: комментарий от selena-gomes

Да ни с чем. Он в мои треды покрасоваться ходит. ни разу ничего содержательного от него не слыхал

anonimous
() автор топика
Ответ на: комментарий от vonenij

А тебя зацепило, доставляешь:)

anonymous
()
Ответ на: комментарий от anonimous

Иначе мы сложим пол-бегемота с пол-слоном

имеем полное право так поступить в свободной абелевой группе, порождённой пол-бегемотом и пол-слоном

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

Сейчас ТС начнет демонстрировать свое абстрактное мышление. Только надо подождать, пока вики проштурмует. Гг.

baverman ★★★
()
Ответ на: комментарий от baverman

Не буду, не надейся, я если чего то не понимаю, в это не лезу. Мне спор ради спора не нужен. А там, про call/cc, я от тебя так и не услышал ничего внятного, ни аргументации, ни пруфов, ни пинков в сторону просветления, или это мы не с тобой там, спорили, я уж забыл, честно говоря, хрен с ним.

anonimous
() автор топика
Ответ на: комментарий от pitekantrop

Все уже успели пошутить на эту тему на первой странице

anonymous
()
Ответ на: комментарий от anonimous

я если чего то не понимаю, но имею свое мнение, то обязательно в это лезу.

fixed

Тебя что пинай, что не пинай, результат один. Ты даже толстые намеки не понимаешь, цепляешься за отвлеченные детали и продолжаешь метанировать и так уже изрядно потрепанную лужу.

Сбрей, наконец, усы и сними камзол и шляпу.

baverman ★★★
()
Ответ на: комментарий от baverman

Намекни хотя бы тонко, в чем заключался твой толстый намек? Я его не увидел, каюсь, объясни для тупого.

anonimous
() автор топика

Прочитал первую строчку ОП, догадался, кто автор, пошел за семками. Это успех, я считаю.

Virtuos86 ★★★★★
()
Ответ на: комментарий от anonimous

Слышь, соска, ты про CPS уже почитало, или все еще остаешься грязным ламерьём?

anonymous
()

после твоих высеров на тему математики, тебя еще долго принимать в серьез не будут %)

dikiy ★★☆☆☆
()
Ответ на: комментарий от anonimous

Следует. Мы всегда должны иметь в виду, что мы имеем дело с одним и тем же объектом, или с двумя эквивалентными. Иначе мы сложим пол-бегемота с пол-слоном.

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

dikiy ★★☆☆☆
()

Для ФП, такой конкретизацией является общий контекст замыканий - в простом случае - глобальная область видимости.

каким образом?

А вообще ЯННП.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

тебя еще долго принимать в серьез не будут

Меня это не особо волнует, их проблемы, хреново только, что это хомячье, считает всегда высказаться по всем вопросам, и срет в топики, если бы они просто игнорировали, было б вообще идеально, ну ниче, в природе ничего идеального не бывает. А мнения их меня не интересуют абсолютно.

anonimous
() автор топика
Ответ на: комментарий от anonimous

ну так кто мешает тогда просто к числу приписывать понятие размерности?

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

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

используются нормировки

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

anonimous
() автор топика
Ответ на: комментарий от anonimous

используются нормировки

Я не знаю, что это такое, но, видимо, как раз тот контекст вычислений, который нужен для текущей задачи. Я

это значит, что мы избавляемся от некоторых исходных значений, чтобы решить задачу в ее чистом нормальном виде. А потом результат преобразовываем обратно.

dikiy ★★☆☆☆
()
Ответ на: комментарий от anonimous

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

anonymous
()
Ответ на: комментарий от dikiy

каким образом?

Таким, что замыкание создает локальный скоп, контекст, где функция, возвратившаяся из замыкания будет искать значения имен. Она не полезет искать значения имен в другом скопе, поэтому тут исключено сложение ужей с ежами, если только ты сам этого заранее не предусмотришь. Если даже она будет вызвана из другого скопа, например глобального, где может быть, еж===уж, она будет всегда знать что еж!=уж, в ее контексте - еж - это всегда еж. Иными словами, конфликт контекстов разруливается синтаксически.

anonimous
() автор топика
Ответ на: комментарий от anonimous

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

For the great justice! ^U Для удобства

vonenij
()
Ответ на: комментарий от dikiy

это значит, что мы избавляемся от некоторых исходных значений, чтобы решить задачу в ее чистом нормальном виде. А потом результат преобразовываем обратно.

Насколько я понимаю, это те же яйца, я уже писал об этом:

Чистота. Что-то тут не так. (комментарий)

anonimous
() автор топика
Ответ на: комментарий от anonimous

Ты до сих пор не в состоянии понять, что такое замыкания.

Попробуй подойти с другой стороны - перепиши лямбда-исчисление в комбинаторную логику, исполняему в семантике graph reduction. Тогда точно поймешь.

anonymous
()
Ответ на: комментарий от dikiy

Шизофазия. Мы вчера с ним беседовали, что «свободные переменные» из замыканий и глобальные переменные - разные вещи. Я надеюсь, он это понял

vonenij
()
Ответ на: комментарий от vonenij

Мы вчера с ним беседовали, что «свободные переменные» из замыканий и глобальные переменные - разные вещи. Я надеюсь, он это понял

Где я утверждал обратное? И уточним термины: свободные переменные тела функции из замыкания.

anonimous
() автор топика
Ответ на: комментарий от anonimous

Для ФП, такой конкретизацией является общий контекст замыканий - в простом случае - глобальная область видимости.

Тогда поясни, что такое «общий контекст замыканий». Хотя лучше не стоит, вряд ли выйдет что-то конструктивное

vonenij
()
Ответ на: комментарий от vonenij

общий контекст замыканий

Если абстрагироваться от деталей, функция, возвратившаяся из замыкания, всегда ищет значения своих свободных переменных исключительно в своем скопе, и если глобальное имя в нем не переопределено, оно в итоге дойдет до глобала, и забиндит его оттуда. Поэтому все функции, берут все значения свободных переменных из глобальной области, если внутри замыкания оно не переопределено.

Вот этот код какбэ намекает на это:



(define global 'global)
(define scope1 (let((local 'local1)) (lambda()(list global local))))
(define scope2 (let((local 'local2)) (lambda()(list global local))))

(define scope-maker (let((global 'local-global))
		 (lambda(local)
		   (lambda() (list global local)))))

(define scope3 (scope-maker 'local3))
(define scope4 (scope-maker 'local4))


(write (scope1))
(newline)
(write (scope2))
(newline)
(write (scope3))
(newline)
(write (scope4))


output: 

(global local1)
(global local2)
(local-global local3)
(local-global local4)

anonimous
() автор топика
Ответ на: комментарий от vonenij

Никогда не встречал размерности в математике. Они там есть?

в физике есть.

dikiy ★★☆☆☆
()
Ответ на: комментарий от anonimous

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

anonymous
()
Ответ на: комментарий от anonymous

Строго говоря, там вообще не существует такого понятия, там есть просто правила подстановки, грубо говоря. И в LC нет данных иконстант.

Кроме того, семантика LC, значительно отличается от скимовской. Поэтому понять замыкания в ЯП через призму LC, не очень то и просто. А я тут рассуждаю не сточки зрения теории и формализмов, а с в большей степени, с практической. И то что я говорю, технически, по факту, соответствует тому, что реально происходит, не уходя в дебри теоретизирований. Технически, здесь ошибки нет.

anonimous
() автор топика
Ответ на: комментарий от vonenij

У тебя есть альтернативные идеи, как наглядно продемонстрировать замыкания, не касаясь при этом всякого говна с именами и контекстами?

anonymous
()
Ответ на: комментарий от anonimous

Кроме того, семантика LC, значительно отличается от скимовской.

Схема тривиально транслируется в SK.

И то что я говорю, технически, по факту, соответствует тому, что реально происходит,

Ни хера не соответствует. Читай про lambda lifting. Только рановато тебе это еще понимать, начни с чего попроще, с тех же суперкомбинаторов.

anonymous
()

Товарищ, как ты думаешь, скомилируется ли этот пример?

newtype Elephant = E Double
newtype Hippopotamus = H Double

class Addition a where
        add :: a -> a ->a
          
        
instance Addition Elephant where
        add (E a) (E b) = E $ a + b    
        
instance Addition Hippopotamus where
        add (H a) (H b) = H $ a + b 
        

main = return (H 0.5 `add` E 0.5) 
anonymous
()
Ответ на: комментарий от anonymous

Ну это же хаскель специфичная тема, от хаскелистов больше шансов получить ответ, ну и релевантная тема в общем-то, ЯП, как таковой тут не столь важен. Я схему знаю немного, там в этом стиле тоже пишут.

anonimous
() автор топика
Ответ на: комментарий от anonymous

Вообще, странные вопросы ты задаешь, типа, какое отношение имеет чистота к хаскелю и клину. Никакого, ес-нно.

anonimous
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.