在Haskell中实现Python内置函数
发布时间:2023-12-09 07:36:45
在Haskell中,Python内置函数可以通过使用适当的Haskell库来实现。下面是一些常用Python内置函数的例子及其在Haskell中的实现:
1. len()函数用于计算列表、元组、字符串等对象的长度。
# Python numbers = [1, 2, 3, 4, 5] print(len(numbers)) # 输出:5
-- Haskell
len :: [a] -> Int
len xs = length xs
main = do
let numbers = [1, 2, 3, 4, 5]
print (len numbers) -- 输出:5
2. max()函数用于获取一组元素中的最大值。
# Python numbers = [1, 2, 3, 4, 5] print(max(numbers)) # 输出:5
-- Haskell
myMax :: Ord a => [a] -> a
myMax [] = error "Empty list"
myMax [x] = x
myMax (x:xs) = max x (myMax xs)
main = do
let numbers = [1, 2, 3, 4, 5]
print (myMax numbers) -- 输出:5
3. sum()函数用于计算一组数字的总和。
# Python numbers = [1, 2, 3, 4, 5] print(sum(numbers)) # 输出:15
-- Haskell
mySum :: Num a => [a] -> a
mySum [] = 0
mySum (x:xs) = x + mySum xs
main = do
let numbers = [1, 2, 3, 4, 5]
print (mySum numbers) -- 输出:15
4. map()函数用于对列表中的每个元素应用一个函数。
# Python numbers = [1, 2, 3, 4, 5] squared = map(lambda x: x**2, numbers) print(list(squared)) # 输出:[1, 4, 9, 16, 25]
-- Haskell
myMap :: (a -> b) -> [a] -> [b]
myMap _ [] = []
myMap f (x:xs) = f x : myMap f xs
main = do
let numbers = [1, 2, 3, 4, 5]
let squared = myMap (^2) numbers
print squared -- 输出:[1, 4, 9, 16, 25]
5. filter()函数用于基于某个条件过滤列表中的元素。
# Python numbers = [1, 2, 3, 4, 5] even_numbers = filter(lambda x: x % 2 == 0, numbers) print(list(even_numbers)) # 输出:[2, 4]
-- Haskell
myFilter :: (a -> Bool) -> [a] -> [a]
myFilter _ [] = []
myFilter p (x:xs)
| p x = x : myFilter p xs
| otherwise = myFilter p xs
main = do
let numbers = [1, 2, 3, 4, 5]
let evenNumbers = myFilter (\x -> x mod 2 == 0) numbers
print evenNumbers -- 输出:[2, 4]
这些都只是一些示例,Haskell中的其他Python内置函数也可以通过类似的方式来实现。
