LINUX.ORG.RU

Чистые функции

 ,


1

4

Долго не мог понять, каую же магию таят в себе чистые функции, и вот наконец проблеск:

(and state1 state2 (change-state)
; этот код может изменить состояние
; мы можем написать этот код в более привычно-костыльной форме:
(if (and state1 state2) (change-state))
; суть от этого не меняется
; этот код основывается на сайд-эффектах и сам создает его
; оформим его в виде функции
(define code (lambda() (and state1 state2 (change-state))))
; теперь мы можем менять состояние делая вызов функции - мы добились просто более краткой записи кода, но пока у нас нет никакой абстракции.
; ту же функцию мы могли бы записать так:
(define code (lambda() (and (get-state1) (get-state2) (change-state))))
; это ничего не меняет, ненужное усложненние
; eсли в нашем приложении имеют значение только эти 3 состояния, то такой код нас устроит во всех отношениях
; однако если у нас есть разные программные объекты которые пользуются тем же принципом, "если это и это тогда это", мы должны обобщить это в виде функции:
(define sup-code (lambda(x y) (and (get-state x) (get-state y) (change-state))))
; данная абстракция не использует напрямую сайд-эффекты, но все еще сама является источником его, исправим это
(define sup-code (lambda(x y z state) (and (get-state x) (get-state y) (z state))))
; мы получили абстракцию которая сама может быть объектом манипуляций, и до тех пор пока она является объектом манипуляций, она не вызовет сайд-эффектов. Если же она будет вызвана, посредством своих аргументов, она создаст сайд-эффекты. Иными словами мы получили СЛОЙ АБСТРАКЦИИ!!!
Таким образом, это банальная абстракция, в некотором смысле, инкапсуляция. Идея вполне себе простая и естественная, в плане расширяемости и преодоления сложности. Собственно вопрос в том, нахрена делать из этого культ, и городить какие-то типы, особенные языки и представлять это как науку посвященных (я имею в виду, что в литературе «постижение» обычно начинается с матанов). Или я неправильно понимаю идею чистоты функций?

☆

Последнее исправление: cetjs2 (всего исправлений: 1)

Да что за мода такая, почему обязательно надо написать так чтоб другие сразу не поняли о чем речь, это круто что ли
?

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

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

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

Да что за мода такая, почему обязательно надо написать так чтоб другие сразу не поняли о чем речь, это круто что ли?

Я не понял, это по поводу чего?

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

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

Как ты тогда терпишь Си? Там ведь, о боже мой, компилятор выранивает поля структур, malloc выдает память, где захочет! Нехорошее ядро того и гляди норовит скинуть страницу памяти на диск! Это я даже не говорю о том, что абсолютно непредсказуемо скачут потоки между процессорами. Непорядок!

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

Можно ссылку на тот топик? А то совсем не понятно, что этот человек(?) вопрошает в данном топике.

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

Писал - это громко сказано, так игрушки. js и scheme, немного питон в самом начале. Я нуб, собственно, ни одного языка я хорошо не знаю.

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

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

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

я неправильно понимаю идею чистоты функций?

да

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

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

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

anonymous
()

царь. версия лайт

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

Которых пишут OOП просто гораздо больше. Люби БС ФП и щас были бы вопли про ненужность ФП и OOП дзен

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

Которых пишут OOП просто гораздо больше. Люби БС ФП и щас были бы вопли про ненужность ФП и OOП дзен

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

Если все тормозит и валится, то почему warp скейлится лучше nginx'а?

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

А вы считаете, что знание/пейсание на языках имеет какое-то отношение к знанию программирования?

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

anonimous

Если бы у меня были мозги в детстве, я бы и к таблице умножения не притронулся. Пустая трата времени.

Мамма мия! Это какая-то адовая помесь Гегеля с неправильно понятым Фейерабендом :) Короче, обычное невежество.

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

Милый человек. Чтобы дискутировать о чём-нибудь с другими людьми, нужно иметь некоторые «точки соприкосновения». Иногда эти точки в совокупности называют фундаментальным образованием, например, когда речь идёт о классической науке. Иногда просто образованием.

В общем, нутыпонел, чего тебе недостаёт.

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

Гегеля

Вы ошибаетесь. Я считаю Гегеля шарлатаном и говном. Ближе Шопенгауэр, раз уж на то пошло.

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

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

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

Чтобы дискутировать о чём-нибудь с другими людьми

Я никому не навязываю дискуссии. Кому не нравится - проходят мимо. В чем проблема?

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

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

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

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

Кстати, эти Ваши понты, косвенно выдают вас; я, во всяком случае, не видел по-жизни ни одного классного спеца с такими понтами «типа абразавание», или просто даже, умного человека. Гламурным кисо Вы будете, да, но серьезных успехов не достигнете нигде. Это диагноз.

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