gpt4 book ai didi

haskell - 多态递归 - 语法和用途?

转载 作者:行者123 更新时间:2023-12-02 10:19:10 29 4
gpt4 key购买 nike

我花了很多时间查看 learnyouahaskell,但没有找到多态递归的良好解释!

我了解基本的递归结构:

myFunction :: [Int] -> [Int]
myFunction [] = []
myFunction (x : xs) = (\x -> x + 1) x : myFunction xs

多态递归会是什么样子?它的好处/用途是什么?

最佳答案

多态递归的类型推断是不可判定的,这意味着编译器无法推断此类函数的类型,即使它的类型正确。

例如,普通列表将 List 应用于两侧相同(多态)类型:

data List a = Cons a (List a)

而此类型取自 Wikipedia articleNested应用于两种不同的(多态)类型:a[a]:

data Nested a = a :<: (Nested [a]) | Epsilon

在同一篇文章中,编译器将无法推断相对简单的 length 函数的类型

length Epsilon = 0
length (a :<: xs) = 1 + length xs

因为length应用于第二个方程中两种不同类型的值,Nested aNested [a]

解决方案是断言该类型确实是嵌套了 -> Int

length :: Nested a -> Int
length Epsilon = 0
length (a :<: xs) = 1 + length xs

关于haskell - 多态递归 - 语法和用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40247339/

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