我是Haskell的新手,几天前开始学习,我对要创建的函数有疑问。

我想制作一个函数来验证x是否为n的因数(例如:375具有以下因数:1、3、5、15、25、75、125和375),然后移除1,然后移除数字本身,并最终验证列表中的奇数数量是否等于偶数数量!

我考虑过制作这样的函数来计算第一部分:

factor n = [x | x <- [1..n], n `mod`x == 0]


但是,如果我将其放在提示符下,则会显示Not in scope 'n'。想法是输入一个像375这样的数字,以便计算列表。我做错了什么?我已经看到在书本中这样的提示中包含了函数。

然后,考虑到我所说的元素,我想到的是做尾巴,然后初始化列表。您认为这是个好主意吗?

最后,我想到了做一个if语句来验证最后一部分。例如,在Java中,我们将执行以下操作:

(x % 2 == 0)? even++ : odd++; // (I'm a beginner to Java as well)


然后,如果偶数=奇数,则表示所有条件均已验证(我们的偶数数量等于奇数)

但是在Haskell中,由于变量是不可变的,我该怎么做something ++的事情?

谢谢你提供的所有帮助 :)

最佳答案

这个小功能可以完成您想要实现的所有功能:

f n = length evenFactors == length oddFactors
  where evenFactors = [x | x <- [2, 4..(n-1)], n `mod` x == 0]
        oddFactors  = [x | x <- [3, 5..(n-1)], n `mod` x == 0]

07-24 18:59
查看更多