Awesome
Functional Programming With Physics
This playground received a Swift Student Challenge 2021 Award. It introduces functional pipline concepts (map
and filter
) using a Rube Goldberg-inspired physics simulation. It also provides an easy API for you to create your own pipeline simulations.
Demo
We can simulate this pipeline:
[8, 7, 9, 10, 4, 6, 5]
.filter { $0.isMultiple(of: 2) }
.map { $0 / 2 }
By executing the following code in the playground:
PlaygroundPage.current.setLiveView(
Simulation(
source: [8, 7, 9, 10, 4, 6, 5],
pipeline: [
Filter(expression: "input is even"),
Map(expression: "input ÷ 2")
]
)
)
Which generates the following user-controlled simulation:
API Notes
Simulation
can be initialised with any integer sequence, so the following is valid:
Simulation(source: 1...10, pipeline: /*...*/)
Some example expressions you can use:
PlaygroundPage.current.setLiveView(
Simulation(
source: /*...*/,
pipeline: [
Filter(expression: "input is odd"),
Filter(expression: "input is prime"),
Filter(expression: "input is negative"),
Filter(expression: "input ≠ 5"),
Filter(expression: "input is square")
]
)
)
Acknowledgements
Expression by Nick Lockwood helps keep the simulation API easy to use.