我可以理解如何创建和思考滑雪和BCKW演算,但是我永远无法找到实际用途。也许我看上去还不够?也就是说,我想知道(我并不是一个例子,我并不意味着这是真的)Java Servlet广泛使用S,而Python发电机是BCW的一个例子,而我只是看不到树木的森林?

有帮助吗?

解决方案

在哈斯克尔,他们是 到处!

  • b<$>
  • Cflip
  • kpure
  • 一世id
  • s<*>
  • wjoin

从哈斯克尔的角度来看, <$> 意思是“在上下文中做”。

  • (+2) <$> (*3) 表示添加两个 乘以三个.
  • (+2) <$> [1,2,3] 表示将两个添加到 列表中的每个元素.
  • (+2) <$> (read . getLine) 表示将两个添加到 我刚刚读的数字.
  • (+2) <$> someParser 表示将两个添加到 我刚刚解析的数字.

具有上下文的事物称为 函子. 。您所有的Java/Python/C ++迭代器都是函数的内而外的怪异。

另一个连接:S和K组合器在一起是图灵完整的。在哈斯克尔, pure<*> 共同形成一个应用函子。

当然,了解其他组合者的适合方式将需要学习Haskell。但是此示例显示了组合者如何在语言中根深蒂固。

其他提示

SKI和BCKW微积分与Lambda微积分(在功能编程概念中有众所周知的应用)分开,因为它们在 无点的形式. 。也可以看看 隐性编程. 。它们构成了理解如何在没有命名参数的情况下构建功能程序的基础。

我们在某些语言中看到了它的应用(例如 喜悦)。我曾经 发布在lambda-the-ultimate.org上 关于SK微积分与猫和喜悦的关系。

对于它的价值:BCKW和SKI(或SK)微积分实际上是相同的,但是BCKW的基础已经脱离了Vogue。

尽管Lambda和Ski微积分没有反映大多数编程语言的输入和输出系统(例如图形,网络连接或甚至可以说是标准输入和输出),但实用的计算机编程的结构方式与Lambda相对应(因此,SKI和SKI和bckw),例如递归的想法和某种方式调用功能的方式。这些编程语言中有很多都有lambda抽象作为功能。

一切都与控制有关。

也许从较低的级别开始。应用系统只是一个系统,可以将对象应用于其他对象。应用系统的一个简单示例是bash。 LS |更多的人可能认为它们在某些环境中,并且上述意味着在环境上做LS,然后做更多的事情。在应用符号中,这更多是 @(ls @ Environment),但是,人们可以做更多复杂的事情,例如ls | GREP模式|现在,在应用符号中,这是更多 @((grep @ pattern) @(ls @ emoventir))。注意GREP @模式。将GREP应用于模式,该模式将其归还程序以匹配LS结果。这是应用程序的申请点,将程序应用于参数,从“ Atomic”(又名内置)程序构建新程序。但是,我们不能仅使用原始应用程序或内置的编程进行太多编程。我们需要一种方法来构建我们的输入和原始内容在我们的输入中的应用。

这就是Lambda进来的地方。使用lambda可以将(GREP @模式)概括为将GREP应用于任何输入(GREP @ x),但是,我们必须有一种方法来获取输入到GREP。因此,我们通常使用功能。 f(x)= grep @ x上述过程被称为抽象参数。但是没有理由将F f的名称视为特殊,因此我们有一个语法:Lambda X。 grep @ x,然后lambdaX。grep @ x,可以应用于输入,输入将被替换为身体并进行评估。但是,替换可能会变得凌乱,在计算机上实现界限可能会很麻烦。滑雪(或b,c,k,w)给出了一种无需替代的lambda工作的方法,而只是在应用程序周围交换。

回顾一下,应用就是全部。在将程序应用于某些方面(可能是另一个程序)的级别上的推理非常方便。 lambda conculus提供了一种构建程序对参数的输入和应用的方法。滑雪给出了一种不必明确替代的方法。

应该注意的是,降低滑雪量本质上是懒惰的,因此可能需要在现实世界中使用滑雪构建应用程序进行一些考虑。确实,这些论点现在可能已经得到充分评估,并且也可能是部分应用程序。可以通过类型理论解决这个问题,只有在程序处于应用程序的头位,仅评估其输入中的程序。即,如果一个人用闭合的lambda术语撰写,则将其翻译成滑雪)可用,2)完全评估。但是,我还没有证明这一点,并且对于足够强的类型理论可能并非如此。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top