我在scala中有这两个函数:
def recursive_func(x: Position, count: Int) : Int = {
if(getNewPositions(x).isEmpty){
count + 1;
} else {
for(n <- getNewPositions(x)){
recursive_func(n, count+1);
}
}
}
def getNewPositions(x: Position) : List[Position] = {
val possible : List[Position] = List((x._1 + 5,x._2 + 6), (x._1 + 6,x._2 + 7), (x._1 + 7,x._2 + 8), (x._1 + 8, x._2 + 9));
val answer : List[Position] = for (n <- possible if canMakeMove(n)) yield n;
answer;
}
第二个返回有时为空的位置列表。第一个是递归函数,如果getNewPositions返回的列表为空,则返回1;如果列表不为,则返回迭代函数。但是我收到了这个错误:
error: type mismatch;
found : Unit
required: Int
我认为是因为编译器试图在空列表上执行(n&lt; - getNewPositions(x)),即使在我的头脑中它不应该因为它包含在if语句中?我确信getNewPositions函数工作正常并返回相应的列表。任何帮助将不胜感激。
答案 0 :(得分:0)
您的代码中有2个错误:
首先:
for(n <- getNewPositions(x)){
recursive_func(n, count+1);
}
此表达式的类型是单位(这会导致编译错误)。原因:for (n <- coll) {..}
扩展为coll.foreach(n => {..})
第二:for (n <- possible canMakeMove(n)) yield {}
绝对不是有效的scala语法