Я некоторое время работал над библиотекой Javascript FP под названием Ramda, а я "м, имея небольшую проблему с именованием вещей. (Вы слышали старую строку, не так ли?" В "Компьютерной науке" есть только две трудные проблемы: недействительность кеша, именование вещей и ошибки "один за другим".)
В этой библиотеке (почти) каждая функция из более чем одного параметра автоматически загружается. И это хорошо работает для большинства случаев использования. Но есть некоторые проблемы с несколькими функциями, которые являются некоммутативными бинарными операторами. Проблема в том, что английские имена часто имеют тенденцию подразумевать нечто иное, чем то, что происходит при применении карри. Например,
var div10 = divide(10);
звучит так, как будто это должна быть функция, которая делит свой параметр на 10. Но на самом деле он делит свой параметр на 10, что довольно ясно, если вы посмотрите на определение:
var divide = curry(function(a, b) {
return a / b;
});
Итак, вместо этого ожидаемый:
div10(50); //=> 5 // NO!!
Фактически вы получаете
div10(50); //=> 0.2 // Correct, but surprising!
Мы справляемся с этим, документируя разницу между возможными ожиданиями людей и создавая divideBy
, который является просто flip(divide)
и subtractN
, который равен flip(subtract)
. Но мы не нашли хорошего эквивалента для таких функций, как lt
:
R.lt = curry(function(a, b) {
return a < b;
});
или его кузенов lte
, gt
и gte
.
Моей собственной интуицией было бы то, что
map(lt(5), [8, 6, 7, 5, 3, 0, 9]);
//=> [false, false, false, false, true, true, false]
Но, конечно, он фактически возвращает
//=> [true, true, true, false, false, false, true]
Итак, я хотел бы сделать ту же самую процедуру с документом и пунктом-альтернативой для lt
и ее ilk. Но я не смог найти доброе имя. Единственный реальный кандидат был ltVal
, и на самом деле это не работает при вызове с обоими аргументами. Мы сделали обсудить эту проблему, но не имели хороших результатов.
Попробовали ли другие с этим и придумали хорошие решения? Или даже если нет, какие-либо хорошие предложения для имени для перевернутых версий этих функций?
Обновление
Кто-то предположил, что это будет закрыто, потому что "непонятно, что вы спрашивали", и я думаю, что вопрос действительно был немного потерян в объяснении. Простой вопрос:
Что было бы хорошим, интуитивным именем для перевернутой версии lt
?