函数式程序员所说的“道德”是啥意思? [关闭]

Posted

技术标签:

【中文标题】函数式程序员所说的“道德”是啥意思? [关闭]【英文标题】:What do functional programmers mean by "moral"? [closed]函数式程序员所说的“道德”是什么意思? [关闭] 【发布时间】:2016-10-06 11:37:22 【问题描述】:

我注意到“道德”这个词不断出现在函数式编程上下文中。几个例子:

Fast and Loose Reasoning is Morally Correct

Purescript Aff 文档:

这在道德上等同于ErrorT (ContT Unit (Eff e)) a

我不熟悉这个词的这些用法。我基本上可以推断出他们想说什么,但我们能否更准确地阐明它的含义?

(在English Language & Usage上交叉发布)

【问题讨论】:

这似乎更像是一个Software Engineering 问题。 FWIW,只要去掉“道德”,感觉还是一样的。 IMO,所有这些“道德”只是一种 FP 时尚;见rationalwiki.org/wiki/Moral_equivalence等。 “道德等价”可以或多或少地被认为是鸭式打字所遵循的相同原则......如果它像鸭子一样走路,像鸭子一样说话,像鸭子一样嘎嘎叫,那么它一定是鸭子。这是另一种说法,“只要最终结果相同(在给定特定输入的情况下,我得到相同的输出),我并不真正关心幕后发生的事情。” 我投票结束这个问题,因为它是关于英语的,而不是编程——这个术语不限于函数式编程。 English Language & Usage 你可能会更幸运。 @Bergi 正如您在答案中看到的那样,moral 一词在数学/编程中具有特定含义。 【参考方案1】:

(形式化的)逻辑中的“道德等价”一词,以及编程中的扩展,与对道德的诉求无关(如在伦理或哲学问题中)。它采用了“道德”一词,但含义不同。它通常应该表示“P 成立,但仅在某些附带条件下”。如果这些条件没有教育价值、琐碎、技术性和/或无聊,则通常会被忽略。因此,关于“道德对等”的链接文章与此无关——这里不涉及价值判断。

我对 Purescript 了解不多,但我将您提到的陈述解释为“您可以使用 Aff 实现与 ErrorT (ContT Unit (Eff e)) a 相同的事情。”

再举一个例子:假设您有两个函数,并且您只对它们域的特定(可能很大)子集感兴趣。假设这两个函数在这些域上是一致的,也就是说,对于所有 x ∈ dom,f(x) = g(x)。但是为了这个例子,也许他们在 0 上做了一些不同的事情,但你永远不会将 0 传递给他们(因为 0 违反了一些假设)。可以合理地说 f 和 g“在道德上是等价的”。

特别是在逻辑学界,“道德”还有其他用法,例如“证明在道德上存在问题”这句话,意思是作者认为证明草率,可能有漏洞,但是技术上可以修复的。在特定情况下,即对潜在的非终止程序进行证明,您提到的论文给出了这样的理由,这在标题“快速和松散的推理在道德上是正确的”中得到了回应。

【讨论】:

【参考方案2】:

正如 Conor McBride 在 twitter 上指出的那样,这种用法源于类别理论社区,它在 fp 中激发了很多灵感。

https://twitter.com/pigworker/status/739971825128607744

Eugenia Cheng 有一篇很好的论文描述了数学中使用的道德概念。

http://www.cheng.staff.shef.ac.uk/morality/morality.pdf

【讨论】:

以上是关于函数式程序员所说的“道德”是啥意思? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

程序开发中yield是啥,怎么用?

main函数是(唯一)被操作系统显式调用的函数。这里的显式调用是啥意思。

exit(o)是啥意思

关于函数式编程的好的开始文本是啥? [关闭]

函数的隐式声明是啥意思?

字节数组是啥意思? [关闭]