2025-06-28 20:40:31 +00:00
|
|
|
fn agent (val) -> receive {
|
|
|
|
(:set, new) -> agent (new)
|
2025-06-27 22:48:27 +00:00
|
|
|
(:get, pid) -> {
|
|
|
|
send (pid, (:response, val))
|
2025-06-28 20:40:31 +00:00
|
|
|
agent (val)
|
|
|
|
}
|
|
|
|
(:update, f) -> agent (f (val))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn agent/set (pid, val) -> {
|
|
|
|
send (pid, (:set, val))
|
|
|
|
val
|
|
|
|
}
|
|
|
|
|
|
|
|
fn agent/get (pid) -> {
|
|
|
|
send (pid, (:get, self ()))
|
|
|
|
receive {
|
|
|
|
(:response, val) -> val
|
2025-06-27 22:48:27 +00:00
|
|
|
}
|
2025-06-28 00:41:29 +00:00
|
|
|
}
|
2025-06-27 00:30:40 +00:00
|
|
|
|
2025-06-28 20:40:31 +00:00
|
|
|
fn agent/update (pid, f) -> {
|
|
|
|
send (pid, (:update, f))
|
|
|
|
agent/get (pid)
|
|
|
|
}
|
2025-06-28 00:41:29 +00:00
|
|
|
|
2025-06-28 20:40:31 +00:00
|
|
|
let myagent = spawn! (fn () -> agent (42))
|
2025-06-28 00:41:29 +00:00
|
|
|
|
2025-06-28 20:40:31 +00:00
|
|
|
print! ("incrementing agent value to", agent/update (myagent, inc))
|