Scala:如何将列表与值相乘

Scala:如何将列表与值相乘,scala,list,multiplication,Scala,List,Multiplication,现在学习Scala并使用列表列表。要将数组乘以一个元素(例如,1) 但是,我得到以下错误: 需要标识符,但找到整数常量 当前代码: 您的代码存在一些问题: 通常,不能对无约束泛型类型执行算术运算;不知何故,您必须传达任何受支持的算术运算 乘以1通常不会产生任何效果 如前所述,您不会使用方括号声明List实例(它们用于声明泛型类型参数) 传递给multiply的参数是两个单独的列表(使用无效分号分隔符而不是逗号),而不是列表列表 在if子句中,返回值为Nil,它与List[List[A]]的声明返

现在学习Scala并使用列表列表。要将数组乘以一个元素(例如,1)

但是,我得到以下错误:

需要标识符,但找到整数常量

当前代码:
您的代码存在一些问题:

  • 通常,不能对无约束泛型类型执行算术运算;不知何故,您必须传达任何受支持的算术运算
  • 乘以1通常不会产生任何效果
  • 如前所述,您不会使用方括号声明
    List
    实例(它们用于声明泛型类型参数)
  • 传递给
    multiply
    的参数是两个单独的列表(使用无效分号分隔符而不是逗号),而不是列表列表
  • if
    子句中,返回值为
    Nil
    ,它与
    List[List[A]]
    的声明返回类型相匹配。但是,
    else
    子句正在尝试执行一个计算,该计算将
    List
    实例(而不是列表的内容)乘以一个Int。即使这有意义,结果类型显然不是
    List[List[a]
    。(这也让我很难准确地理解您想要实现的目标。)
  • 假设您试图将内部列表的每个成员乘以一个特定的因子,下面是一个修正上述问题的代码版本:

    这将产生以下输出:

    List(List(15, 20, 25, 30), List(20, 25, 30, 35, 40))
    
    2419200
    
    但是,您可能只是试图将列表中的所有值相乘。这实际上有点简单(注意不同的返回类型):

    这将产生以下输出:

    List(List(15, 20, 25, 30), List(20, 25, 30, 35, 40))
    
    2419200
    

    我建议你读一本关于Scala的好书。在这些例子中有很多非常复杂的东西,在这里解释这些东西需要很长时间。一个好的开始是用Scala编程,Odersky,Spoon&Venners的第三版。这将涵盖
    列出[A]
    操作,如
    映射
    展平
    产品
    ,以及
    隐式
    函数参数和
    隐式val
    声明。

    您的代码有一些问题:

  • 通常,不能对无约束泛型类型执行算术运算;不知何故,您必须传达任何受支持的算术运算
  • 乘以1通常不会产生任何效果
  • 如前所述,您不会使用方括号声明
    List
    实例(它们用于声明泛型类型参数)
  • 传递给
    multiply
    的参数是两个单独的列表(使用无效分号分隔符而不是逗号),而不是列表列表
  • if
    子句中,返回值为
    Nil
    ,它与
    List[List[A]]
    的声明返回类型相匹配。但是,
    else
    子句正在尝试执行一个计算,该计算将
    List
    实例(而不是列表的内容)乘以一个Int。即使这有意义,结果类型显然不是
    List[List[a]
    。(这也让我很难准确地理解您想要实现的目标。)
  • 假设您试图将内部列表的每个成员乘以一个特定的因子,下面是一个修正上述问题的代码版本:

    这将产生以下输出:

    List(List(15, 20, 25, 30), List(20, 25, 30, 35, 40))
    
    2419200
    
    但是,您可能只是试图将列表中的所有值相乘。这实际上有点简单(注意不同的返回类型):

    这将产生以下输出:

    List(List(15, 20, 25, 30), List(20, 25, 30, 35, 40))
    
    2419200
    

    我建议你读一本关于Scala的好书。在这些例子中有很多非常复杂的东西,在这里解释这些东西需要很长时间。一个好的开始是用Scala编程,Odersky,Spoon&Venners的第三版。这将涵盖
    列出[A]
    操作,如
    映射
    展平
    产品
    ,以及
    隐式
    函数参数和
    隐式val
    声明。

    使数值操作可用于
    A
    类型,您可以使用
    context-bound
    A
    与之关联,后者提供了
    times
    fromInt
    等方法,以便在此用例中执行必要的乘法:

    def multiply[A: Numeric](listOfLists: List[List[A]]): List[List[A]] = {
      val num = implicitly[Numeric[A]]
      import num._
      if (listOfLists == Nil) Nil else
        listOfLists.head.map(times(_, fromInt(-1))) :: multiply(listOfLists.tail) 
    }
    
    multiply( List(List(3, 4, 5, 6), List(4, 5, 6, 7, 8)) )
    // res1: List[List[Int]] = List(List(-3, -4, -5, -6), List(-4, -5, -6, -7, -8))
    
    multiply( List(List(3.0, 4.0), List(5.0, 6.0, 7.0)) )
    // res2: List[List[Double]] = List(List(-3.0, -4.0), List(-5.0, -6.0, -7.0))
    

    有关
    上下文绑定
    的更多详细信息,请参阅相关的。

    以使数值操作可用于键入
    a
    ,您可以使用
    context-bound
    A
    与之关联,后者提供了
    times
    fromInt
    等方法,以便在此用例中执行必要的乘法:

    def multiply[A: Numeric](listOfLists: List[List[A]]): List[List[A]] = {
      val num = implicitly[Numeric[A]]
      import num._
      if (listOfLists == Nil) Nil else
        listOfLists.head.map(times(_, fromInt(-1))) :: multiply(listOfLists.tail) 
    }
    
    multiply( List(List(3, 4, 5, 6), List(4, 5, 6, 7, 8)) )
    // res1: List[List[Int]] = List(List(-3, -4, -5, -6), List(-4, -5, -6, -7, -8))
    
    multiply( List(List(3.0, 4.0), List(5.0, 6.0, 7.0)) )
    // res2: List[List[Double]] = List(List(-3.0, -4.0), List(-5.0, -6.0, -7.0))
    

    有关
    上下文绑定的更多详细信息,请参阅相关的。

    您需要理顺语法。在Scala中,必须传递方括号中的类型。您试图用错误的语法传递值。您可能需要执行类似于
    乘法(List(List(3,4,5,6),List(4,5,6,7,8))
    。在Scala中,你通常不需要分号。你的问题很不清楚。您能否提供您希望发生的事情的精确说明,包括任何和所有规则、这些规则的例外情况、拐角情况、特殊情况、边界情况和边缘情况?您能否提供示例输入和输出,以演示在正常情况下,以及在所有异常情况下、角落情况下、特殊情况下、边界情况下和边缘情况下预期会发生的情况?您需要理顺语法。在Scala中,必须传递方括号中的类型。您试图用错误的语法传递值。您可能需要执行类似于
    乘法(List(List(3,4,5,6),List(4,5,6,7,8))
    。在Scala中,通常不需要分号