Netlogo 在参数列表上应用函数列表

Netlogo 在参数列表上应用函数列表,netlogo,Netlogo,我有一个匿名函数列表,需要映射到一个参数列表上。我的愿望是获得一个列表,其中包含的元素是函数列表中的函数,在每个参数列表中进行计算 我的第一个想法是将函数列表映射到参数列表上,然后将函数列表中的函数应用到参数列表中的每个元素上 ;; definitions for k functions let fj [ [x1 x2 ... xn ] -> <body j> ] ... let args [ [ ... ] [ ... ] ... [ ... ] ] ;; list of

我有一个匿名函数列表,需要映射到一个参数列表上。我的愿望是获得一个列表,其中包含的元素是函数列表中的函数,在每个参数列表中进行计算

我的第一个想法是将函数列表映射到参数列表上,然后将函数列表中的函数应用到参数列表中的每个元素上

;; definitions for k functions
let fj [ [x1 x2 ... xn ] -> <body j> ]
...

let args [ [ ... ] [ ... ] ... [ ... ] ] ;; list of arguments

let f-list ( list f1 f2 ... fk )

map [ [ arg ] -> map [ [ f ] -> ( runresult f arg ) f-list ] ]  args
使用调用上述过程的
setup
按钮可产生以下输出:

,NetLogo现在通过(实验性的和未记录的)
\uuu应用
\uu应用结果
原语提供此功能

在您的情况下,
\u apply-result
是您需要的:

globals [ f-list args ]

to setup

  let f1 [ [x y z] -> (x - 5) ^ 2 + (y - 5) ^ 2 + 0 * (z - 5) ^ 2 ]
  let f2 [ [x y z] -> 4 * y ^ 2 + 4 * x ^ 2 + 0 * z ^ 2 ]
  let f3 [ [x y z] -> 2 + (y - 2) ^ 2 + (x - 1) ^ 2 + 0 * x ]
  let f4 [ [x y z] -> 9 * x - (z - 1) ^ 2 + 0 * y ]

  set f-list (list f1 f2 f3 f4)
  set args [[2.04 3.09 -1.32] [5.57 -3.9 4.0] [-1.1 -0.432 8.0] [1.32 -2.3 -9.103]]

  print map [ arg -> map [ f -> __apply-result f arg ] f-list ] args

end

如您所见,
\u apply-result
接受两个参数,一个匿名报告器和一个列表,并自动将列表中的项目作为参数传递给匿名报告器。
\uu apply
原语与此类似,但它使用匿名命令而不是匿名报告程序。

您能创建一些示例数据吗?只有几个函数和几个参数。如果我们能看到一些输入和预期的输出,这个问题就会更容易理解。
observer: [[12.4097 54.8388 8.570500000000001 12.977599999999999] [79.53490000000001 184.9396 45.81 41.13] [66.716624 5.586496 56.914624 -58.9] [66.83239999999999 28.129599999999996 122.56060899999999 -90.190609]]
globals [ f-list args ]

to setup

  let f1 [ [x y z] -> (x - 5) ^ 2 + (y - 5) ^ 2 + 0 * (z - 5) ^ 2 ]
  let f2 [ [x y z] -> 4 * y ^ 2 + 4 * x ^ 2 + 0 * z ^ 2 ]
  let f3 [ [x y z] -> 2 + (y - 2) ^ 2 + (x - 1) ^ 2 + 0 * x ]
  let f4 [ [x y z] -> 9 * x - (z - 1) ^ 2 + 0 * y ]

  set f-list (list f1 f2 f3 f4)
  set args [[2.04 3.09 -1.32] [5.57 -3.9 4.0] [-1.1 -0.432 8.0] [1.32 -2.3 -9.103]]

  print map [ arg -> map [ f -> __apply-result f arg ] f-list ] args

end