【发布时间】:2013-09-22 17:17:28
【问题描述】:
我是 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 这样的数字,以便计算列表。我做错了什么?我在书中看到过类似这样的提示中的函数。
然后,为了获取我所说的元素,我正在考虑做 tail 然后 init 到列表中。你认为这是个好主意吗?
最后我想到了做一个 if 语句来验证最后一部分。例如,在 Java 中,我们会做这样的事情:
(x % 2 == 0)? even++ : odd++; // (I'm a beginner to Java as well)
然后如果偶数 = 奇数,那么它会说所有条件都已验证(我们的偶数数量等于奇数)
但是在 Haskell 中,由于变量是不可变的,我该怎么做 something++ 的事情?
感谢您提供的任何帮助:)
【问题讨论】:
-
你必须使用递归。 learnyouahaskell.com/recursion