Что такое point free style в функциональном программировании?
фраза, которую я заметил недавно, - это концепция стиля "точка бесплатно"...
во-первых, был этот вопрос, а также этот.
затем, я обнаружил здесь они упоминают " еще одна тема, которую, возможно, стоит обсудить, - это неприязнь авторов к свободному стилю point."
Что такое стиль "точка бесплатно"? Может кто-нибудь дать краткое объяснение? Это как-то связано с "автоматом" выделки?
чтобы получить представление о моей уровень-я учил себя схеме, и написал простой интерпретатор схемы... Я понимаю, что такое" неявное " каррирование, но я не знаю никакого Хаскелла или мл.
5 ответов:
просто посмотри статья в Википедии получить ваше определение:
молчаливое Программирование (точечное программирование)-это парадигма программирования, в которой определение функции не включает информацию о ее аргументах, используя комбинаторы и композицию функций [...] вместо переменных.
Хаскелл пример:
обычный (вы указываете аргументы явно):
sum (x:xs) = x + (sum xs) sum [] = 0точки-бесплатно (
sumне имеет никаких явных аргументов - это просто складка с+начиная с 0):sum = foldr (+) 0или еще проще: вместо
g(x) = f(x), вы могли бы просто написатьg = f.так что да: это тесно связано с каррингом (или операциями, такими как композиция функций).
стиль без точек означает, что аргументы определяемой функции явно не упоминаются, что функция определяется через композицию функции.
если у вас есть две функции, как
square :: a -> a square x = x*x inc :: a -> a inc x = x+1и если вы хотите объединить эти две функции в одну, которая вычисляет
x*x+1, вы можете определить его "точка-полный" следующим образом:f :: a -> a f x = inc (square x)бессмысленной альтернативой было бы не говорить о аргументе
x:f :: a -> a f = inc . square
пример JavaScript:
//not pointfree cause we receive args var initials = function(name) { return name.split(' ').map(compose(toUpperCase, head)).join('. '); }; //pointfree var initials = compose(join('. '), map(compose(toUpperCase, head)), split(' ')); initials("hunter stockton thompson"); // 'H. S. T'
Point free style означает, что код явно не упоминает его аргументы, даже если они существуют и используются.
это работает в Haskell из-за способа работы.
например:
myTake = takeвозвращает функцию, которая принимает один аргумент, поэтому нет причин явно вводить аргумент, если вы просто не хотите тоже.
вот один пример в TypeScript без какой-либо другой библиотеки:
interface Transaction { amount: number; } class Test { public getPositiveNumbers(transactions: Transaction[]) { return transactions.filter(this.isPositive); //return transactions.filter((transaction: {amount: number} => transaction.amount > 0)); } public getBigNumbers(transactions: Transaction[]) { // point-free return transactions.filter(this.moreThan(10)); // not point-free // return transactions.filter((transaction: any) => transaction.amount > 10); } private isPositive(transaction: Transaction) { return transactions.amount > 0; } private moreThan(amount: number) { return (transaction: Transaction) => { return transactions.amount > amount; } } }вы можете видеть, что стиль без точек более "беглый" и легче читается.
Comments