Что такое “точка свободный” стиль (в Функциональном программировании)?

Фраза, которую я заметил недавно, является понятием "точки свободный" стиль...

Во-первых, был этот вопрос и также этот.

Затем я обнаружил здесь, они упоминают "Другую тему, которую может стоить обсудить, неприязнь авторов к точке свободный стиль".

Что такое "точка свободный" стиль? Кто-то может дать краткое объяснение? Это имеет некоторое отношение к "автоматическому" приправлению карри?

Для понимания мой уровень - я преподавал мне Схему и записал простой интерпретатор Схемы... Я понимаю, каково "неявное" приправление карри, но я не знаю Haskell или ML.

87
задан smci 5 August 2019 в 04:00
поделиться

3 ответа

Достаточно взглянуть на статью в Википедии , чтобы получить свое определение:

Молчаливое программирование (программирование без точек) - это парадигма программирования, в которой определение функции не включает информацию о его аргументах, используя комбинаторы и композицию функций [...] вместо переменных.

Пример Haskell:

Обычный (вы указываете аргументы явно):

sum (x:xs) = x + (sum xs)
sum [] = 0

Без точек ( sum не имеет явных аргументов - это просто свертка с + , начиная с 0):

 sum = foldr (+) 0

Или еще проще: вместо g (x) = f (x) вы можете просто написать g = f .

Итак да: это тесно связано с каррированием (или такими операциями, как композиция функций).

60
ответ дан 24 November 2019 в 07:52
поделиться

Бесточечный стиль означает, что аргументы определяемой функции не упоминаются явно, что функция определяется посредством композиции функций.

Если у вас есть две функции, например

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
29
ответ дан 24 November 2019 в 07:52
поделиться

Точечный стиль означает, что в коде явно не упоминаются его аргументы, даже если они существуют и используются.

Это работает в Haskell из-за того, как работают функции.

Например:

myTake = take

возвращает функцию, которая принимает один аргумент, поэтому нет причин явно вводить аргумент, если вы просто не хотите тоже.

4
ответ дан 24 November 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: