Haskell 哈斯克尔:这个方法做什么
在我的测试中,有一个问题是,这种方法的作用是什么Haskell 哈斯克尔:这个方法做什么,haskell,semantics,Haskell,Semantics,在我的测试中,有一个问题是,这种方法的作用是什么 dosa=([x | x你已经接近所发生的事情了。有几个部分需要理解 首先,[2..diva2]生成一个从2到楼层(a/2)的数字列表 接下来,mod a x==0过滤掉从2到floor(a/2)的值 划分a(例如,它查找a的所有因子)。 因此,由 [x | x <- [2 .. div a 2], mod a x == 0] 这是检查一个数字是否为素数的基本算法。它遍历从2到a/2的所有数字,并检查其中是否有任何数字除以a,如果列表为空
dosa=([x | x你已经接近所发生的事情了。有几个部分需要理解
首先,[2..diva2]
生成一个从2到楼层(a/2)
的数字列表
接下来,mod a x==0
过滤掉从2到floor(a/2)
的值
划分a
(例如,它查找a
的所有因子)。
因此,由
[x | x <- [2 .. div a 2], mod a x == 0]
这是检查一个数字是否为素数的基本算法。它遍历从2
到a/2
的所有数字,并检查其中是否有任何数字除以a
,如果列表为空,则表示它在2
和a/2
之间没有因子,这意味着该数字为素数。找到答案的最佳方法将表达式分解为多个函数,并在REPL中对其求值。[2..div a 2]
返回从2到a/2的整数列表。此算法不好。只需检查数字是否可被平方不大于数字的素数整除。@Ingo我没有说任何关于此算法的内容。这是他的考试中提出的问题,所以我只是解释它的作用。考试中你不能回答任何问题说“你的算法不是最优的,所以我不会回答这个问题”。我知道,我只是想提一下,以免有人认为这只是一个愚蠢的家庭作业问题算法。
Prelude> let dos a = ([x | x <- [2..div a 2], mod a x == 0] == [])
Prelude> :t dos
dos :: Integral t => t -> Bool
Prelude> filter dos [2 .. 100]
[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97] -- Prime goodness