繁体   English   中英

计算最多 3 个数字的两种不同的计算方法

[英]Two computationally different ways of computing the maximum of 3 numbers

Q) 编写两个不同的函数maximum1 和maximum2,计算三个数的最大值。 无法使用内置的 max 函数

我有以下代码,这会被认为在计算上有所不同吗?

maximum1:: Int->Int->Int->Int
maximum1 x y z| x> y && x> z = x
          |y>x && y>z =y
          | otherwise =z

maximum2::Int->Int->Int->Int
maximum2 x y z= head [k | k<-[x,y,z], k>x && k>y || k>x && k>z || k>y && k>z]
maximum1:: Int->Int->Int->Int
maximum1 x y z| x>= y && x>= z = x
          |y>=x && y>=z =y
          | otherwise =z

maximum2:: Int->Int->Int->Int
maximum2 x y z| x-y>=0 && x-z>=0 = x
          |y-x>=0 && y-z>=0 =y
          |otherwise =z

第一个更好,因为它不需要列表、过滤器和头部。 如果编译器没有正确优化,这将导致代码效率低下,就 memory 的使用和速度而言。 如果您确实需要一个恰好需要三个 arguments 的 function,那么您的第一个解决方案是可取的。 如果您有值列表,则可以使用以下 function。

maxl :: (Foldable t, Ord b, Bounded b) => t b -> b
maxL = foldl max minBound

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM