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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.