gpt4 book ai didi

Haskell 高阶函数。传递两个函数作为参数。

转载 作者:行者123 更新时间:2023-12-02 13:28:23 25 4
gpt4 key购买 nike

我最近一直在自学 Haskell,我的练习之一是实现一个函数,该函数以两个函数作为参数,并将数字 3 传递给第一个函数,将结果传递给第二个函数。我对 Racket 有更多的经验。我为 Racket 创建的函数是

(define (nestfun3 function function2)
(function2 (function 3)))

我正在尝试在 Racket 中复制此功能。我知道只有一个函数作为参数的高阶函数可以像

twice function = function . function

如何传递两个函数?我试过了

twice function = function . function
three function = function . twice

最佳答案

直接翻译为:

apply3 :: Num a => (a -> b) -> (b -> c) -> c
apply3 f g = g (f 3)

记住:您不想只组合函数 - 您希望首先应用3,然后将结果应用到另一个函数


抱歉混合了......现在应该可以了:

λ> let f = (+1)
λ> let g = (*2)
λ> apply3 f g
8
λ> apply3 g f
7

如果您想知道 - 您实际上不必从签名开始(尽管添加它是一个很好的做法) - 如果您在 ghci 中执行此操作:

λ> let apply3 f g = g (f 3)
λ> :t apply3
apply3 :: Num a => (a -> t1) -> (t1 -> t) -> t

它会给你它(或者你可以使用 ghc-mod 或其他什么) - 我实际上只是重命名了类型参数(那些 t 很难看)

这样它看起来应该与您在Scheme中所做的非常相似

当然,您可能希望确保在重命名时不要交换函数:|

关于Haskell 高阶函数。传递两个函数作为参数。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33397246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com