我正在学习 lisp 语言(做 lisp 例程),在一般情况下我知道什么是例程,但在技术方面我可以谈论它,因为我现在开始学习例程。那么,常规的真正定义是什么?(我已经“用谷歌搜索”了这个但没有找到任何东西)
2 回答
术语routine源自subroutine,这是一个在 BASIC 等语言中更常见的术语,其中人们实际上创建了 SUBroutines。(BASIC 实际上在 SUBroutine 和 FUNCTION 之间有区别,但无论如何......)
从维基百科条目:
在计算机科学中,子例程(也称为过程、函数、例程、方法或子程序)是执行特定任务并且相对独立于其余代码的较大程序中的一部分代码。
正如“子程序”的名称所暗示的那样,子程序的行为方式与用作较大程序或另一个子程序中的一个步骤的计算机程序的行为方式非常相似。一个子程序通常被编码,以便它可以在程序的单次执行期间多次和/或从多个位置启动(“调用”),包括从其他子程序,然后分支返回(返回)到下一条指令之后一旦子程序的任务完成,“调用”。
不同的语言/环境/时代有不同的生态系统,因此有不同的术语来描述相同的一般概念。这些天我通常只使用术语函数(或“OOP”环境中的方法)。
快乐编码。
为了好玩,我有社区维基。下面的列表有望涵盖在给定语言中使用哪些术语是“正确的”(被广泛接受的)来表示常规。非正式地,例程用于以下所有语言的上下文中,因此除非它是事实上使用的术语,否则应将其省略。随意添加,更正和适当的注释。
- C -函数
- Java方法。虽然函数也经常被使用,但术语函数并没有出现在Java 语言规范中。
- C# -方法和函数。在规范中,函数是指函数对象和匿名函数。它们与方法不同,方法是类型(类或结构)的成员。还要考虑代表。
- JavaScript函数或方法。方法是通过对象的属性访问的函数。
- Haskell函数。这是公认的术语。
- Scala函数或方法。方法如果
def
是类型的成员,函数是一等值。 - BASIC函数或子程序。子例程不返回值。支持按引用调用。
- FORTRAN函数或子程序。子例程不返回值。支持按引用调用。
- LISP功能。DEFUN -> DEfineFUNction,所有形式都是有效的表达式。还要考虑宏,它们本身不是函数,但可以说是例程。
- VHDL -子程序:函数和程序。过程没有返回值。
- SmallTalk -方法
- Python -方法
- Ruby -方法(经常与函数互换?lambdas/Procs 可能被认为不同?)
- Perl函数和子例程。只有一种形式来声明函数/子程序,因此返回值没有区别。使用方法(用于对象绑定函数)似乎不如其他语言流行。
- Pascal -过程和函数
- Ada -过程和函数
您找不到技术定义,因为没有特定于 lisp 的技术定义。杂耍之外的“例行公事”只是功能的另一个名称。虽然我已经有很多年没有全职使用 Lisp 编程了,但从来没有人以任何正式的方式使用过这个术语,甚至没有人经常使用它。我们讨论了“函数”、“宏”和“表单”。如果有人说,“哦,有一个计算一个馅饼中有多少苹果的例程”,那是完全不正式的。