Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 哈斯克尔:这个方法做什么_Haskell_Semantics - Fatal编程技术网

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