Спасибо всем за все ответы.
Я добавлю сюда мое, что в принципе и является моим (вероятно, мисс) пониманием вашего.
Я думаю, что критерии для того, чтобы называть что-либо OO или FP, - это то, как «материал» строится с использованием языка; не то, насколько легко или трудно это сделать, я имею в виду используемую ментальную парадигму.
Например, как показывают ссылки, может быть сложнее что-то набрать в Scala, чем в OCaml, но это не делает его менее FPL (может быть неполным или нечистым, но определенно функциональным); потому что целью Scala является использование функций в качестве основных строительных блоков, а не объектов.
С другой стороны, упрощение написания функции на языке не делает ее функциональной, если стиль или цель - использовать другие артефакты. Например, Smalltalk позволяет очень легко написать анонимный блок или предоставить подключаемый компаратор сортировки, но это вовсе не делает его ЛЮБЫМ функциональным, потому что основное внимание уделяется использованию объектов и передаче сообщений. Blockclosures - это просто механизм для кодирования этих сообщений (а не функций), даже если они выглядят так же, как и функции.
Путаница возникает из-за того, что OO и FP ортогональны (как Rahul указано в твиттере), поэтому то, что выглядит как закодированное сообщение в Smalltalk, во многом похоже на анонимную функцию в Scala. Но выполнение чего-то подобного не превращает язык одной парадигмы в другую.
Что еще хуже, Scala также использует OO-парадигму, чтобы облегчить переход программистам (Java, C ++, C #), и, если вы видите, он добился куда большего успеха, чем любой другой FPL сделал. И, конечно, это было благодаря Java (ИМХО, если Clojure добьется успеха, будет по той же причине, JVM)
В заключение : Язык программирования может быть классифицирован по парадигме, которую он использует для построения «вещей». Есть такие чистые языки, как [Smalltalk: OO, Haskell: Functional, C: Procedural] или гибриды, такие как Scala или multi-paradigm, например C ++, Ruby, Python.
Тот факт, что вы можете написать один стиль с другим языком, не делает его этим языком этого стиля. Подобно тому, как симуляция объектов с помощью Lisp не делает его OO, а использование функций с Java не делает его функциональным.
Чтобы ответить на вопрос, который считается функциональным, Smalltalk должен использовать функции в качестве строительных блоков, а это не так, потому что он использует объекты.