programming-languages - 为什么是高阶程序?

标签 programming-languages functional-programming scheme closures abstraction

因此,如果一种语言提供更高阶的过程,那么我可以拥有返回过程的过程。就像是:

(define (Proc a b c)
  (lambda (x) ( #| method body here in terms of a b c and x |# )))

要创建新程序,我会执行以下操作:
(define ProcA (Proc a1 b1 c1)) ; Would create ProcA that has 1 argument

通过定义 Proc,可以在不支持高阶过程的语言中完成类似的任务。它需要 4 个而不是 3 个参数并调用此过程来定义 ProcA , 喜欢:
(define (Proc a b c x) ( #| method body -- does not return any procedure |# )
(define (ProcA x) (Proc a1 b1 c1 x))

那么为什么对高阶过程有如此多的模糊呢?我错过了什么吗?

最佳答案

一个很好的观察结果是,返回另一个函数的函数与接受两个参数的函数相同。这被称为“ curry ”。换句话说,从 A 到 B 的函数是逻辑蕴涵的证明,即 A 蕴涵 B,或者:

A => B.

如您所见,如果 A 暗示 B 暗示 C,则 A 和 B 暗示 C,或者:
(A => (B => C)) <==> ((A, B) => C)

但是高阶函数不一定是返回另一个函数的函数。 高阶函数是将另一个函数作为参数的函数 .这是一个重要的区别,HOF 是非常强大的编程工具。

例如,考虑这个 Haskell 函数:
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : (map f xs)

这个高阶函数接受一个函数 f并将其应用于列表中的每个元素。在没有 HOF 的语言中,你可以用循环或类似的东西来做这个函数所做的事情,但在有 HOF 的语言中,你可以调用 f对于列表中的每个元素,只需简单调用如下:
map f myList

当然,语言中的控制结构可以让你逼近高阶函数,但是 一种具有高阶函数的语言让您可以发明自己的控制结构 .方案当然有资格。

关于programming-languages - 为什么是高阶程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/832668/

相关文章:

programming-languages - 哪个是最佳选择?

javascript - JavaScript 中的延迟/ promise 概念是一个新概念还是函数式编程的传统部分?

c++ - 功能/不可变数据结构在非垃圾收集上下文中是否仍然对并发有用?

scheme - 如何在方案中将列表转换为代码/lambda?

list - 在 Scheme 中生成一个倍数列表

programming-languages - 成功的非程序员,5GL,Visual,0源代码或类似工具?

java - 使用脚本语言时如何避免混淆?

functional-programming - Erlang追踪: Causal consistency?

scheme - 计数变化 SICP

programming-languages - 响应式(Reactive)编程和函数式响应式(Reactive)编程之间的区别