我是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]