gpt4 book ai didi

haskell 带 2 个参数的函数返回带 1 个参数的函数?

转载 作者:行者123 更新时间:2023-12-02 08:37:43 25 4
gpt4 key购买 nike

考虑这段代码:

type Graph = (Char, Function) 
type Function = Char -> Int
doThingsWithGraph :: Graph -> String
func :: Function
graph :: Graph

main = do x <- getChar
y <- getChar
let graph = (x, func)
putStrLn $ doThingsWithGraph graph

执行doThingsWithGraph暂时不要紧。现在这里的问题是 func的输出还取决于我从用户那里得到的第二个字符,但我不知道如何将它传递给它。我不能将它作为参数传递,因为 func 是由第三方实现的,我不能更改类型。所以如果 haskell 有全局变量和 y是一个 func的实现看起来像这样:

func char 
|isDigit char = digitToInt char + digitToInt y
|otherwise = digitToInt y

这显然行不通,因为 func不知道是什么y是的,但这就是它应该做什么的想法。所以y是我需要以某种方式让 func 的值知道(这是我在 main 的第二行从用户那里得到的)。我做不到getLine里面func因为这与我无法更改的数据类型不一致(大型框架的一部分)。有任何想法吗?也许一些辅助函数可以代替 funclet graph = (x, func)然后返回Function类型的函数?这只是一个猜测..

最佳答案

你的用户生成 func 可以简单地实现一个像 Char -> Function 这样的函数,然后把它交给你,而不是一个带有 promise 的原始 Function你会给他们输入的第二个字符作为第一个参数。

的确,这在没有全局变量的语言中是很自然的事情:你必须在你的函数输入中声明你需要的所有信息。其他任何方法都行不通。

你最终会得到

doThingsWithGraph (x, makeFunc y)

当这变得很麻烦时,Reader Monad 可以提供帮助。

关于haskell 带 2 个参数的函数返回带 1 个参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19610800/

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