【问题标题】:SML How to subtract 2 lists and compare the product?SML 如何减去 2 个列表并比较产品?
【发布时间】:2012-01-10 22:29:51
【问题描述】:

我正在尝试减去 2 个列表并返回比较产品。

所以如果列表 a = [2,3,2] b = [1,1,1] 然后 a-b = [1,2,1] 并且返回的产品 (c) 应该是 1。

val c = List.map (fn i => (i - b) mod 10) a

模 (mod) 10 适用于两个相减数得出奇数结果的情况,例如2-8 = ~6 mod 10 = 4。

我被困在减法上,因为 List.map 不允许我做减法,因为它需要一个 int 值而不是一个 int 列表(至少不是我编写它的方式:()。

我也对比较一无所知。

【问题讨论】:

  • 比较产品是什么意思?
  • 我应该用不同的方式表达它,我的意思是 c 列表中最常见的值并返回它。
  • 我想将 c 列表与其自身进行比较,以检查所有元素是否都是相同的值,如果是则返回该值。额外的好处是检查它们是否不是,然后是最常表示的值 + 找出不适合的元素并返回它们的值和位置。
  • 我想出了这个“val n_filter = List.all (fn x => x = n_value_char) n_chars”来解决比较问题。

标签: sml


【解决方案1】:

您可以使用ListPair.map 一次遍历 2 个列表,如下所示:

val c = ListPair.map (fn (i, j) => (i - j) mod 10) (a,b)

【讨论】:

    【解决方案2】:

    你不想减去b——你想减去相应的值。一种方便的方法是将列表压缩在一起:

    val c = List.map (fn (i, j) => (i - j) mod 10) (ListPair.zip (a, b))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多