首页 > 解决方案 > 如何计算 Stanza 列表中函数的 argmax?

问题描述

我想知道是否有一个函数可以计算 Stanza 中f的数字列表(整数、长整数、浮点数)上的函数的 argmax numbers

它将具有以下行为:

defn argmax (f, numbers: Tuple) :
  val N = length(numbers)
  if N == 0 :
    fatal("Can't compute the argmax of an empty tuple")

  var max-index = 0
  var max-value = numbers[0]

  for idx in 1 to N do :
    val value = f(numbers[idx])
    if value > max-value :
      max-index = idx
      max-value = value
  
  max-index

defn f (x) :
  x * x

println $ argmax(f, [1, 6, 2, 5])

结果 :

1

谢谢!

标签: stanza

解决方案


一种创建方法argmax是功能样式,如下所示:

defn argmax (nums:Tuple<Comparable>) :
  reduce(fn (a, b) : a when (a[1] > b[1]) else b, zip(0 to false, nums))[0]

max它对组合索引和值的元组应用成对。要完成解决方案,您将使用以下内容:

defn f (x) :
  x * x

defn argmax (f, nums:Tuple<Comparable>) :
  argmax(map(f, nums))

推荐阅读