Я не думаю, что есть такая вещь, как внутренняя читаемость. Есть то, к чему вы привыкли, и к чему вы не привыкли. Я смог прочитать обе версии вашего кода в порядке. На самом деле я мог бы легче читать вашу версию Groovy, хотя я и не знаю Groovy, потому что я тоже потратил десятилетие на изучение C и Java и всего год на изучение Clojure. Это ничего не говорит о языках, это говорит только обо мне.
Точно так же я могу читать по-английски легче, чем по-испански, но это также ничего не говорит о внутренней читаемости этих языков. (На самом деле испанский язык, вероятно, является «более читабельным» языком в плане простоты и последовательности, но я до сих пор не могу его прочитать). Я учу японский прямо сейчас, и мне тяжело, но носители японского говорят то же самое об английском.
Если вы посвятили большую часть своей жизни чтению Java, конечно, вещи, которые выглядят как Java, будут легче читать, чем вещи, которые этого не делают. Пока вы не потратите столько времени на изучение языков Lispy, как на языки, подобные C, это, вероятно, останется верным.
Чтобы понимать язык, помимо прочего, вы должны быть знакомы с:
- синтаксис (
[vector]
против (list)
, hyphens-in-names
)
- словарь (что означает
reductions
? Как / где вы можете найти его?)
- правила оценки (работает ли функция как объект? Это ошибка в большинстве языков.)
- идиомы, такие как
(map first (some set of reductions with extra accumulated values))
Все это требует времени, практики и повторения, чтобы выучить и усвоить. Но если вы потратите следующие 6 месяцев на чтение и написание большого количества Clojure, вы не только сможете понять этот код Clojure через 6 месяцев, вы, вероятно, поймете его лучше, чем сейчас, и, возможно, даже сможете упростить его. Это. Как насчет этого:
(use 'clojure.contrib.seq-utils) ;;'
(defn positions [coll]
(mapcat #(repeat (count %) (inc (ffirst %)))
(partition-by second (indexed coll))))
Глядя на код Clojure, который я написал год назад, я ужасаюсь, насколько это плохо, но я могу прочитать его, хорошо. (Не говорить, что ваш код Clojure ужасен; у меня не было никаких проблем с его чтением, и я не гуру.)