在我编写的许多脚本中,我经常以"功能样式"构建程序.也就是说,我基本上在开始时定义了很多函数,然后再应用这些函数.这导致一系列嵌套函数调用,其中我键入:
...等等.
对于函数被"管道"在一起的情况,一个函数的输出是下一个函数的参数(通常是第一个,但不总是),其输出是下一个函数的参数,并且是无限的.在前缀表示法中,如果您从左到右键入此序列,则键移动可能非常突然.例如,你将如何键入以下[Python]示例的第二行(~mul~是乘法,~truediv~是除法)?
from operator import add, mul, truediv
print(truediv(mul(add(1,1),2),4))
Run Code Online (Sandbox Code Playgroud)
如果我必须线性地编写相同的操作集(从左到写,没有跳转),我更可能使用函数组合的表示法.基于我之前在Python中的示例,我可能会写
from functional import foldr, compose, partial, flip
print(foldr(compose,add,(partial(mul,2),partial(flip(truediv),4)))(1,1))
Run Code Online (Sandbox Code Playgroud)
我认为这是因为我将每个函数与它自己的参数相关联,并且更喜欢连续输入它们,而不是在第一个函数的参数列表完成之前将参数填充到另一个函数(因为需要键入第一个示例)从左到右).
我注意到了这一点,因为我很长一段时间以来一直是emacs用户,并且最近才尝试过viper/vimpuse和vim.在emacs中,我可能会做类似的事情
...等等,偶尔使用Mb,Mf,M-DEL(后向单词,前向单词,后向单词),如果我搞砸或遗忘某些东西.
我最近在vim中发现了Co,这是一个救星 - 但我发现相同的键是
......其余的; 后向词,前向词和后向词 - 等同词将是Co b和Co w,以及Cw.
所以这让我想到要在vim中编程,我可能需要增加一个更大的工作内存,这样我可以暂停构建一个函数,因为我填写另一个函数,依此类推.另外,在构建文本文档时,我发现即使在完成一个完整的思考之前我也经常编辑(杀死,复制,猛拉),这对于vim的"保持正常模式,插入文本的突发"的操作风格来说是不太合适的. -mode,并回到正常模式",这似乎假设我能够在我进入插入模式的过程中产生值得编辑的东西.为了使用vim,我发现在打字时我会考虑更多,以减少模式之间切换的频率.这是因为我自然是痉挛性的,或者一旦我掌握或提出适当范围的肌肉记忆的vim关键命令,我就会不再想他们了
如果你在emacs和vim中编程,你是否发现自己在每个编辑器中以不同的方式思考和构建程序和文本块?
我从 1992 年开始使用 vi,现在从 2001 年开始使用 Emacs。在编写函数和代码块时,我没有注意到我的思维有任何差异。两位编辑器都有自己的特点和做事方式,但他们还没有强大到可以改变你的思维方式和编程方式。
我一直在努力寻找方法去做我想做的事情。我不会让编辑强迫我做我不想做的事情。当我对一段新代码进行过程编程时,我使用计算机程序的结构和解释中提到的称为“一厢情愿”的技术:
您想象自己处于一个完美的世界,拥有您所需要的所有程序。您可以使用需要实现的所有有用函数来编写算法,但目前您只有原型。它类似于自上而下的方法。
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |