当前位置:  开发笔记 > 编程语言 > 正文

指定参数

如何解决《指定参数》经验,为你挑选了1个好方法。

我是Haskell的新手,我正在进行一些函数式编程工作.

以下是如何指定查找两个数字的最大值的示例:

max :: Integer -> Integer -> Integer
max x y
 | x >= y = x
 | otherwise = y

max' :: Integer -> Integer -> Integer
max' x y = 
 if x >= y then x else y

prop_max1 :: Integer -> Integer -> Bool
prop_max1 x y =
 x <= max x y && y <= max' x y

我想使用这个prop_max1函数,所以我写:

prop_max1 (max 1 2) (max' 1 2)

返回True.

但如果我写

prop_max1((max 1 2) (max' 1 2))

这不起作用,我得到一个与预期类型不匹配的错误.为什么我不能这样写呢?



1> Electric Cof..:

如果您熟悉Python,Ruby,JavaC#,通常会调用函数:

func(a, b)

Haskell,F#OCaml中,它们被调用如下:

func a b

这意味着Haskell a-la a b中的另一个术语后跟另一个术语是a(b)Python中的函数调用a-la .

这基本归结为:

prop_max1 (max 1 2) (max' 1 2) -- is the same as prop_max1(max(1, 2), max'(1, 2))

prop_max1 ((max 1 2) (max' 1 2)) -- is the same as prop_max1(max(1, 2)(max'(1, 2))))

请注意放置方式的不同之处prop_max1(max(1, 2), max'(1, 2))prop_max1(max(1, 2)(max'(1, 2))))不同之处().


附注:一个看起来像这样的函数调用:f(a)(b)基本上与此相同:

g = f(a)
g(b)

但是作为单一陈述书写,意思max(1, 2)(max'(1, 2))是相同的

m1 = max(1, 2) 
m1(max'(1, 2))

同样适用于Haskell,其中(max 1 2) (max' 1 2)相同:

m1 = max 1 2
m1 (max' 1 2)

无论如何,它可能更容易,看看我们是否删除1和2,使其prop_max1(max, max')VS prop_max1(max(max')),

在第一种情况下max,max'它们分别是第一个和第二个参数prop_max1,而在第二种情况下max'max返回函数的参数.

这就是为什么prop_max1 (max 1 2) (max' 1 2)有效,而prop_max1 ((max 1 2) (max' 1 2))不是.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有