Во многих сценариях, которые я пишу, Я часто строю программы в «функциональном стиле». То есть вначале я определяю множество функций, а потом применяю их. Это приводит к последовательности вызовов вложенных функций, в которой я набираю:
... и так далее.
Для В случаях, когда функции «соединены» вместе, вывод одной функции является аргументом (обычно первым, но не всегда) следующей функции, вывод которой является аргументом следующей функции, и до бесконечности. В префиксной нотации движения клавиш могут быть очень скачкообразными, если вы набираете эту последовательность слева направо. Например, как бы вы набрали вторую строку в следующем примере [Python] (~ mul ~ - это умножение, ~ truediv ~ - это разделение)?
from operator import add, mul, truediv
print(truediv(mul(add(1,1),2),4))
Если бы мне пришлось писать один и тот же набор операций линейно (слева, чтобы писать, без прыжков), я бы с большей вероятностью использовал обозначение композиции функций. Основываясь на моем предыдущем примере на Python, я мог бы написать
from functional import foldr, compose, partial, flip
print(foldr(compose,add,(partial(mul,2),partial(flip(truediv),4)))(1,1))
. Я думаю, это потому, что я связываю каждую функцию с ее собственными аргументами и предпочитаю вводить их последовательно, а не заполнять аргументы другой функции перед списком аргументов для первого функция завершена (как это потребовалось бы для ввода первого примера слева направо).
Я заметил это, потому что я долгое время был пользователем emacs и только недавно попробовал viper / vimpuse и vim. В emacs я мог бы сделать что-нибудь вроде
Основываясь на моем предыдущем примере на Python, я мог бы написатьfrom functional import foldr, compose, partial, flip
print(foldr(compose,add,(partial(mul,2),partial(flip(truediv),4)))(1,1))
. Я думаю, это связано с тем, что я связываю каждую функцию с ее собственными аргументами и предпочитаю вводить их последовательно, а не заполнять аргументы другой функции перед списком аргументов для первого функция завершена (как это потребовалось бы для ввода первого примера слева направо).
Я заметил это, потому что я долгое время был пользователем emacs и только недавно попробовал viper / vimpuse и vim. В emacs я мог бы сделать что-нибудь вроде
Основываясь на моем предыдущем примере на Python, я мог бы написатьfrom functional import foldr, compose, partial, flip
print(foldr(compose,add,(partial(mul,2),partial(flip(truediv),4)))(1,1))
. Я думаю, это связано с тем, что я связываю каждую функцию с ее собственными аргументами и предпочитаю вводить их последовательно, а не заполнять аргументы другой функции перед списком аргументов для первого функция завершена (как это потребовалось бы для ввода первого примера слева направо).
Я заметил это, потому что я долгое время был пользователем emacs и только недавно попробовал viper / vimpuse и vim. В emacs я мог бы сделать что-нибудь вроде
вместо того, чтобы заполнять аргументы другой функции до того, как будет завершен список аргументов для первой функции (что потребовалось бы для ввода первого примера слева направо).Я заметил это, потому что я был пользователем emacs для давно и только недавно опробовал viper / vimpuse и vim. В emacs я мог бы сделать что-нибудь вроде
вместо того, чтобы заполнять аргументы другой функции до того, как будет завершен список аргументов для первой функции (что потребовалось бы для ввода первого примера слева направо).Я заметил это, потому что я был пользователем emacs для давно и только недавно опробовал viper / vimpuse и vim. В emacs я мог бы сделать что-нибудь вроде
... и так далее, с периодическим использованием Mb, Mf, M-DEL (backward-word, forward-word, backward-kill-word), если я ошибаюсь или забыть что-нибудь.
Недавно я узнал о Co в vim, что очень помогает - но я обнаружил, что эквивалентными ключами будут
... и остальное; эквивалентами обратного слова, прямого слова и обратного уничтожающего слова были бы Co b, Co w и Cw.
Это заставило меня подумать, что для программирования в vim мне, возможно, придется увеличить объем рабочей памяти, чтобы я мог приостанавливать создание одной функции при заполнении другой и так далее по стеку. Кроме того, при создании текстовых документов я обнаружил, что довольно часто редактирую (уничтожаю, копирую, восстанавливаю) даже до того, как закончу полную мысль, что не очень подходит для стиля работы vim «оставаться в нормальном режиме, всплеск текста при вставке -mode и обратно в нормальный режим », который, кажется, предполагает, что я способен создать что-то стоящее редактирования во время моих набегов на режим вставки. Чтобы использовать vim, я обнаружил, что во время набора текста я уделяю больше внимания сокращению частоты переключения между режимами. Это потому, что я спастичен от природы, или как только я овладею или передаю подходящий диапазон ключевых команд vim для мышечной памяти, я перестану думать, что они такие разные?
Если вы программируете и в emacs, и в vim, делайте вы обнаруживаете, что думаете и строите свои программы и блоки текста по-разному в каждом редакторе?