【发布时间】:2020-06-12 07:30:34
【问题描述】:
我想创建一个仿真模型来学习 Scala 和函数式编程 (FP)。我已经有了所有的逻辑:创建一组代理(它只是一个List[Agent],其中Agent 是一个定义单个成员的类,就像气体中的一个粒子)和一些功能(例如在空间中移动) ) 对人口“行动”。
我的问题出现了,因为 FP 中的不变性,我想多次对初始种群应用相同的函数。我想将这些函数应用于 N 轮的初始总体(在应用所有函数后定义一轮)。我不知道如何处理轮次之间的不可变值。
通常,我会做一个 for 循环,其中一个变量会改变它的值,但是当值是不可变的时你如何处理呢?
我的代码现在看起来像这样:
object Main extends App {
val soc = Society(numAgents = 1000) // Create a Society
val agents = soc.initSociety() // Init the society
val movedAgents = soc.moveAgents(agents) // Move the agents
}
方法被定义为返回List[Agent],因此类型始终相同。
我已经看到一些使用foldleft 的解决方案,但我需要将函数 moveAgents 应用于它返回的内容。
【问题讨论】:
标签: scala functional-programming simulation