传递Set [List [Int]]类型的值而不是List [Int]-为什么这样做有效?

伊利

当我查看签名和函数调用时,我很难理解以下内容。

在我的工作表中,有以下内容(摘自Coursera的演讲):

 object nqueens {

  def queens(n: Int) : Set[List[Int]] = {
    def placeQueens(k: Int) : Set[List[Int]] =
      if (k == 0) Set(List())
      else
      for  {
        queens <- placeQueens(k - 1)
        col <- 0 until n
        if isSafe(col, queens)
      } yield col :: queens
    placeQueens(n)
  }

  def isSafe(col: Int, queens: List[Int]) : Boolean = {
    val row = queens.length
    val queensWithRow = (row - 1 to 0 by -1) zip queens
    queensWithRow forall {
      case (r, c) => col != c && math.abs(col - c) != row -r
    }
  }

  def show(queens: List[Int]) = {
    val lines =
      for (col <- queens.reverse)
        yield Vector.fill(queens.length)("* ").updated(col, "X ").mkString
    "\n" + (lines mkString "\n")
  }

  (queens(4) map show) mkString "\n"

}

考虑到签名placeQueenisSafe

def placeQueens(k: Int) : Set[List[Int]]

def isSafe(col: Int, queens: List[Int]) : Boolean

我不知道为什么行得通。我们调用placeQueens并将结果保存在queens(在for循环中)。

结果应为类型Set[List[Int]]然后,我们称之为isSafe有两个参数IntSet[List[Int]]-但我不明白为什么这作品,因为queens应该是类型Set[List[Int]]为和参数isSafeList[Int]

维克拉姆

我们调用placeQueens并将结果保存为Queens

您的代码未将的结果保存placeQueens到中queens

for  {
    queens <- placeQueens(k - 1)
    col <- 0 until n
    if isSafe(col, queens)
  } yield col :: queens

该代码实际上用于理解。有问题的特定行:

queens <- placeQueens(k-1) 

正在将List[Int]存入皇后区,因为它正在对从Set[List[Int]]返回的返回进行迭代placeQueens为了给出一个更简单的示例,它可能有助于说明正在发生的事情,请考虑:

val a = Set(1,2,3)
val b = for (x <- a) yield x + 2

执行此代码后,b将为Set(3,4,5)这是因为在for循环的每次迭代中,x先是1,然后是2,然后是3。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

传递Set [List [Int]]类型的值而不是List [Int]-为什么这样做有效?

来自分类Dev

为什么 std::list<string> 有效但 std::list<int> 无效

来自分类Dev

为什么颤振返回类型'List <dynamic>'不是'函数结果'的类型'List <int>'的子类型?

来自分类Dev

C ++:为什么int array [size]有效?

来自分类Dev

为什么`int .__ eq __(other)`是有效的比较?

来自分类Dev

为什么Scala的indexOf(在List等中)返回Int而不是Option [Int]?

来自分类Dev

使用long而不是int来创建List类型以进行计数

来自分类Dev

int[] 到 List<int> 的类型映射

来自分类Dev

如何通过FormUrlEncodedContent传递List <int>

来自分类Dev

如何通过FormUrlEncodedContent传递List <int>

来自分类Dev

检查int或list <int>

来自分类Dev

Flutter:http请求List <Dynamic>不是类型List <int>的子类型

来自分类Dev

为什么String用A进行类型检查,但List [Int]不使用List [A]?

来自分类Dev

在 Dictionary<int,List<int>> 中查找值

来自分类Dev

将Go接口{}与内置类型直接进行比较:为什么这样做有效?

来自分类Dev

不同的List <List <int >>?

来自分类Dev

C ++互相分配数组;类型int * =类型int有效,但不是int = int *?

来自分类Dev

Flutter应用程式中类型转换的例外类型'List <dynamic>'不是'List <int>'类型的子类型

来自分类Dev

为什么当int array [n]无效时,新int [n]有效吗?

来自分类Dev

为什么分配“ int常量->字节变量”有效,而“ long常量-> int变量”无效?

来自分类Dev

Swift:为什么'subscript(var digitIndex:Int)-> Int'是有效的函数签名?

来自分类Dev

相交两个具有重复值的List <int>

来自分类Dev

相交两个具有重复值的List <int>

来自分类Dev

MyList = new List<int>(); 有效,但 MyList.Clear(); 没有

来自分类Dev

为什么 std::vector<double> v{unsigned int} 没有选择有效的构造函数?

来自分类Dev

在功能参数中传递具有10条以上lac记录的List <int>?

来自分类Dev

将List <int?>转换为List <int>

来自分类Dev

在Dart中处理字节数组时,使用Uint8List而不是List <int>有什么优点?

来自分类Dev

在Dart中处理字节数组时,使用Uint8List而不是List <int>有什么优点?

Related 相关文章

  1. 1

    传递Set [List [Int]]类型的值而不是List [Int]-为什么这样做有效?

  2. 2

    为什么 std::list<string> 有效但 std::list<int> 无效

  3. 3

    为什么颤振返回类型'List <dynamic>'不是'函数结果'的类型'List <int>'的子类型?

  4. 4

    C ++:为什么int array [size]有效?

  5. 5

    为什么`int .__ eq __(other)`是有效的比较?

  6. 6

    为什么Scala的indexOf(在List等中)返回Int而不是Option [Int]?

  7. 7

    使用long而不是int来创建List类型以进行计数

  8. 8

    int[] 到 List<int> 的类型映射

  9. 9

    如何通过FormUrlEncodedContent传递List <int>

  10. 10

    如何通过FormUrlEncodedContent传递List <int>

  11. 11

    检查int或list <int>

  12. 12

    Flutter:http请求List <Dynamic>不是类型List <int>的子类型

  13. 13

    为什么String用A进行类型检查,但List [Int]不使用List [A]?

  14. 14

    在 Dictionary<int,List<int>> 中查找值

  15. 15

    将Go接口{}与内置类型直接进行比较:为什么这样做有效?

  16. 16

    不同的List <List <int >>?

  17. 17

    C ++互相分配数组;类型int * =类型int有效,但不是int = int *?

  18. 18

    Flutter应用程式中类型转换的例外类型'List <dynamic>'不是'List <int>'类型的子类型

  19. 19

    为什么当int array [n]无效时,新int [n]有效吗?

  20. 20

    为什么分配“ int常量->字节变量”有效,而“ long常量-> int变量”无效?

  21. 21

    Swift:为什么'subscript(var digitIndex:Int)-> Int'是有效的函数签名?

  22. 22

    相交两个具有重复值的List <int>

  23. 23

    相交两个具有重复值的List <int>

  24. 24

    MyList = new List<int>(); 有效,但 MyList.Clear(); 没有

  25. 25

    为什么 std::vector<double> v{unsigned int} 没有选择有效的构造函数?

  26. 26

    在功能参数中传递具有10条以上lac记录的List <int>?

  27. 27

    将List <int?>转换为List <int>

  28. 28

    在Dart中处理字节数组时,使用Uint8List而不是List <int>有什么优点?

  29. 29

    在Dart中处理字节数组时,使用Uint8List而不是List <int>有什么优点?

热门标签

归档