Racket中的“过程”和“功能”是同义词吗?

时间:2019-01-13 01:14:56

标签: function racket procedure terminology

Racket(Scheme的一种方言)中的“过程”和“功能”是同义词吗? the documentation似乎暗示了这一点。例如,compose的文档将其描述为过程,该过程

  

[r]返回组成给定功能过程 ... compose 功能   允许给定的功能消耗并产生任意数量的   值...

(以上所有斜体字都是我添加的。)

我知道procedure?是一个库过程,而function?不是。我的问题是,在讨论程序时(例如教课或编写文档时)互换使用术语是否正确。

2 个答案:

答案 0 :(得分:3)

TL; Dr这只是行话,意思是一样的。函数,过程和静态方法在编程中是相同的。

从历史上看,函数在数学上是自变量与结果之间的映射。过程是执行某些操作的代码块,并且其输出不需要绑定到任何特定的输入。 因此,您可以说一个函数是一个没有副作用的过程。

计划标准仅使用术语过程。您根本找不到关于功能的任何提示。从历史上看,Racket是为教育目的而制定的标准Scheme实施方案,如今在很大程度上仍与Scheme兼容,但他们已经分裂了,并不认为自己会遵循Scheme标准。 How to design programs和许多文档使用术语函数,在本文档中,它是过程的同义词。

Common Lisp始终使用术语函数及其前身,后者早于Scheme。

我认为我什至已经翻译了语言之间的SO答案,并更改了代码以及只是为了与语言术语本身保持一致而切换了功能和过程。我很乐意看到Racket有一天要清理干净,留下一个名字来统治所有人。

答案 1 :(得分:2)

简短版本:是的。

更长的版本:许多人在对齐词汇以用于教学中做得很好。这是我想到的第一篇论文,尽管它没有专门针对过程/功能选择:

https://cs.brown.edu/~sk/Publications/Papers/Published/mfk-measur-effect-error-msg-novice-sigcse/paper.pdf

从教学的角度来看,对同一件事用两个名字当然是无益的。

最后,如果您在Racket Mailing List上问这个问题,您将得到一个更权威的答案(坦率地说,我想知道这里的状态)。

[EDIT]哦,此外,我完全不会说procedure一词更可能表示库中定义的内容。