- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道什么样的现实生活问题可以通过函数式编程中的“对偶方法”来解决。更准确地说,我想知道是否有人确实使用了我在下面介绍的对偶方法,或者是否还有其他有趣的例子。我会对 特别感兴趣现有实现 ,可能在 Haskell 中。
[由于对这个问题感兴趣的大多数人可能都知道 Haskell,请让我添加 Haskell 标签,即使问题与语言完全无关]
让我通过几个例子来解释一下我所说的二元性(没有更好的名字)是什么意思。第一个是 实数 .假设存在 Integer
和 Rational
键入,并将实数定义为函数(请原谅我的 Haskell,我不是铁杆 haskeller)
type Real = Integer -> Rational
x :: Real
表示实数 x,
x n
产生一个在
2^(-n)
范围内的有理数x。
(+) :: Real -> Real -> Real
(+) x y n = (x $ n + 1) + (y $ n + 1)
f x
只要有人能计算出
modulus of continuity对于
f
.
x
之间唯一可能的比较和
y
是
x < y + eps
.
type Measure a = (a -> Double) -> Double
type VectorField = SmoothFunction -> SmoothFunction
v (f * g) = f * (v g) + g * (v f)
.
type AnalyticFunction = Double -> Integer -> [Double]
f x n
返回
n
f
的泰勒展开式的第一部分和约
x
.这使我们能够无缝地在分析函数上编写各种算术,包括像
f / g
这样的东西。在哪里
f
和
g
两者都可以在某个点消失(连同它们的一些衍生物),甚至
f^(-1)
(前提是
f'
不会消失)。最后,只计算中间序列的必要项以产生给定表达式的值。
最佳答案
您的示例的共同特征是通过函数表示某些(数学)对象。这在函数式语言中很常见,但不如在数学中实用,因为程序中的函数是扩展使用的(你不能检查它们的定义,只能观察它们对参数的作用),并且只能用于可计算的操作(你只能观察有限数量的论据)。
在数学中,您不必为这些东西烦恼,例如,您经常说“如果 f 是解析的,那么让 (a_n) 成为它的系数序列,并且...”。在计算机语言中,如果您从 Double -> Integer -> [Double]
类型的函数开始,将其转换为可以轻松恢复系数的表示会很痛苦。在编程语言中,函数真的是黑盒子。
出于这个原因,程序员经常尝试使用显式数据表示而不是函数黑盒。您可以轻松地从数据表示中获得函数(它是一种评估或解释),而反过来可能会更困难、效率更低等。请参阅 Conal Elliott 的 “Everything is a function” in Haskell? .
然而,在我们真正想要扩展对象的情况下仍然使用函数,这些对象只能被观察而不是被检查。对于您要定义的对象上的每个可能的观察,您给出一个实现该观察的函数。在您的示例中,您只有一个函数,因为您只有一个观察值。这是 William Cook 在他的 On Understanding Data Abstraction, Revisited 中定义的面向对象编程的核心思想。纸。
我认为您将其与术语“二元性”(即在 Haskell 知识分子中,与范畴论概念相关的术语)联系起来的原因是,从对象到对它的某种特定观察形式的转变有时是在数学中称为对偶,并且具有在任何地方添加函数的效果。例如,有一个向量空间对偶的经典例子,特别是对偶构造,它实际上是从向量到线性函数观察的转换:你从 V
切换至(V -> K) -> K
, 对于 K
向量空间下的字段。
(阅读我的最后一个例子会想到延续吗?当然这些是相关的,因为延续的这种表示实际上是对具体评估上下文的“观察”,由它们对值的作用来表示。)
您对概率度量的表示实际上用于在功能语言中定义概率度量单子(monad)。有不同的方法来定义概率单子(monad)。参见示例 http://www.cs.tufts.edu/~nr/pubs/pmonad-abstract.html诺曼拉姆齐和阿维菲弗。然而,大多数现实世界的概率 DSL 实现使用更具体的表示,例如 [(prob,event)]
对列表(Haskell probability 库和 OCaml HANSEI)。
最后,有关将实数表示为函数的示例,请参阅 Russel O'Connor 的 A Monadic, Functional Implementation of Real Numbers。 . “可计算”数的许多表示存在并且具有不同的优点,其中大多数是基于序列的,因此可以表示为Integer -> ...
。功能。
关于math - 函数式编程中的对偶方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5557810/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!