我正在尝试使用.
运算符编写一个带三个值并返回其最大值的函数。
显然,以下工作
max3 a b c = max a (max b c)
max3 a b c = max a $ max b c
但我想使用.
。我试过了
max3 a b c = max a . max b c
但得到错误
Couldn't match expected type `a0 -> Float' with actual type `Float'
In the first argument of `max', namely `b'
我知道这个例子很愚蠢,但是正确的方法很好地解释以及为什么会非常感激。
答案 0 :(得分:6)
回想myTextBox.setFocus(true);
myTextBox.selectAll();
boolean success = copyToClipboard();
private static native boolean copyToClipboard() /*-{
return $doc.execCommand('copy');
}-*/;
:
(.)
你有表达式
(f . g) x = f (g x)
如果我们设置max a (max b c)
,(f . g) x
和f = max a
,会匹配g = max b
的右侧。在x = c
定义的左侧使用这些替换,我们得到:
(.)
答案 1 :(得分:6)
让我们在你的第一个例子中介绍一些括号:
<!doctype html>
<html>
</head>
<body>
<div class="widget-body" style="border: solid 1px black; height:45px; margin-bottom:10px;margin-right:20px;background:linear-gradient(to right, #85e2f0 5% , white 95%);">
<div class="col-xs-2" style="height:45px; font-size: 28px;">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
</div>
<div class="col-xs-8" style="height:30px;text-align:center; border: solid 1px black;margin-top: 6px; display: flex; align-items: center;justify-content: center; background-color: #42d442;">test</div>
<div class="col-xs-2" style="height:43px; font-size: 27px; text-align: center;">
<a data-toggle="dropdown">
<span class="glyphicon glyphicon-menu-down" aria-hidden="true"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li><a href="#">Item 1</a></li>
<li><a href="#">Another item</a></li>
<li><a href="#">This is a longer item that will not fit properly</a></li>
</ul>
</div>
</div>
</body>
</html>
现在将其与上一篇文章进行比较:
max3 a b c = (max a) ((max b) c)
或者,如果我们在前缀表示法中写max3 a b c = (max a) . ((max b) c)
:
(.)
现在我们明白为什么你会得到这个错误。为了进行类型检查,max3 a b c = (.) (max a) ((max b) c)
需要是一个函数:
(max b) c
如果我们使用(.) :: (b -> c ) -> (a -> b ) -> a -> c
max a :: Float -> Float
max b c :: Float
^^^^^^^^^^^
的约束版本,我们会收到更好的错误消息:
max
现在错误消息好多了:
maxFloat :: Float -> Float -> Float maxFloat = max max3 a b c = max a . max b c
话虽如此,让我们实际解决这个问题:
Couldn't match expected type ‘a0 -> Float’ with actual type ‘Float’
Possible cause: ‘maxFloat’ is applied to too many arguments
In the second argument of ‘(.)’, namely ‘maxFloat b c’
In the expression: maxFloat a . maxFloat b c
请注意,您也可以写
max3 a b c = max a ((max b) c)
= (max a . max b) c