小编Jam*_*son的帖子

f [] = v在Foldr递归模式中的含义是什么?

当对函数产品使用Foldr递归模式时,我们得到:

product [] = 1
product (x:xs) = x * product xs
Run Code Online (Sandbox Code Playgroud)

我的问题是,'product [] = 1'是什么意思?例如,对于sum函数,我们有sum [] = 0?这是答案的某种限制吗?

先感谢您.

recursion haskell fold

2
推荐指数
1
解决办法
112
查看次数

你会如何在Haskell中声明这些函数的类型?

所以我现在正在学习Haskell,我遇到了这个问题:

函数的类型f应该是a->[a]->a.以下定义f不正确,因为它们的类型都不同于a->[a]->a:

i. f x xs = xs
ii. f x xs = x+1
iii. f x xs = x ++ xs
iv. f x (y:ys) = y
Run Code Online (Sandbox Code Playgroud)

我看到的答案是:

i) f :: a -> a -> a
Run Code Online (Sandbox Code Playgroud)

这是因为x或xs可以是任何值而不是列表,因为它不包含':'运算符.

ii) f :: Int -> a -> Int
Run Code Online (Sandbox Code Playgroud)

这是因为+运算符用于x,意味着x是Int类型.

iii) f :: Eq a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)

使用++运算符,因此为了连接它们必须是相同的类型..?

iv) f :: a -> [a] -> a
Run Code Online (Sandbox Code Playgroud)

f从列表中返回一个元素.

最后一个肯定是错的,因为它不能是a - > [a] …

haskell types

2
推荐指数
2
解决办法
96
查看次数

你会如何在Haskell中定义这些类型?

我正在学习Haskell,但我发现很难理解什么似乎是最基本的东西!首先,了解类型.例如,我真的不了解这些函数的类型,

threetimes f x = f (f (f x))
Run Code Online (Sandbox Code Playgroud)

要么

triple x = x * 3
Run Code Online (Sandbox Code Playgroud)

不会将三倍x和三倍为整数类型,因为它们采用值并对它们应用操作?

在查看最后一个函数时,

last xs = head (reverse xs)
Run Code Online (Sandbox Code Playgroud)

最后的类型是什么?

多谢你们.对不起,如果问题似乎是基本的!

haskell types function

0
推荐指数
1
解决办法
108
查看次数

理解在Haskell中的all函数中使用括号?

我试图围绕Haskell中的编程约定和规则.我发现令人困惑或难以理解的一件事是使用括号().任何人都可以向我解释在所有功能的情况下它做了什么?

all :: (a -> Bool) -> [a] -> Bool
all p xs = and [ p x | x <- xs ]
Run Code Online (Sandbox Code Playgroud)

据我了解,函数的类型显示了类型约束,输入和输出.不会

all :: [a] -> Bool
Run Code Online (Sandbox Code Playgroud)

足够?

haskell function

0
推荐指数
1
解决办法
140
查看次数

标签 统计

haskell ×4

function ×2

types ×2

fold ×1

recursion ×1