компонуемость , примененная к функциям, означает, что функции меньше и четко определены, поэтому их легко интегрировать в другие функции (я видел эту идею в книге «Радость замыкания»)
концепция может применяться к другим вещам, которые, как предполагается, должны быть составлены во что-то другое.
цель возможности повторного использования. например, хорошо построенную (компонуемую) функцию проще использовать повторно
макросы не так хорошо компонуются, потому что вы не можете передать их в качестве параметров
lock - чушь, потому что вы не можете дать им имена (определить их правильно) или использовать их повторно. вы просто делаете их на месте
императивные языки не настолько сложны, потому что (по крайней мере, некоторые из них) не имеют замыканий . если вы хотите, чтобы функциональность передавалась в качестве параметра, вы облажались. Вы должны построить объект и передать его; отказ от ответственности здесь: эта последняя идея, в которой я не совсем уверен, верна, поэтому изучите больше, прежде чем принять ее как должное
другая идея в императивных языках заключается в том, что они плохо сочетаются, поскольку подразумевают состояние (из wikipedia база знаний :) "Императивное программирование - описывает вычисления с точки зрения утверждений, которые изменяют состояние программы ").
состояние плохо составляется, потому что, хотя вы дали конкретное «что-то» на входе, это «что-то» генерирует вывод в соответствии с его состоянием. другое внутреннее состояние, другое поведение. и, таким образом, вы можете попрощаться с тем, что вы ожидаете.
с состоянием вы сильно зависите от знания текущего состояния объекта ... если вы хотите предсказать его поведение. больше вещей, которые нужно держать в уме, менее сложными (помните четко определенный ? или " маленький и простой", как в "простом в использовании"?)
ps: думаешь об изучении clojure, а? расследовать ...? повезло тебе ! : P