Difference between revisions of "W2511 Emergence & Lindenmayer Systems (Part 1)"
m (Merlin moved page Project-2511 to W2511 Emergence & Lindenmayer Systems (Part 1): Improved navigation) |
|||
Line 78: | Line 78: | ||
== Key Concepts == | == Key Concepts == | ||
{{KeyConcepts| | |||
* An '''L-System''' is a '''Lindenmayer System''' | * An '''L-System''' is a '''Lindenmayer System''' | ||
** It is a '''rewriting system''' consisting of: | ** It is a '''rewriting system''' consisting of: | ||
Line 86: | Line 87: | ||
** L-systems were introduced and developed in '''1968''' by '''Aristid Lindenmayer''', a Hungarian theoretical biologist | ** L-systems were introduced and developed in '''1968''' by '''Aristid Lindenmayer''', a Hungarian theoretical biologist | ||
** L-systems are used to model plant cell behavior and growth | ** L-systems are used to model plant cell behavior and growth | ||
* An L-System is formally defined as a [https://en.wikipedia.org/wiki/Tuple tuple] | * An L-System is formally defined as a <span style{{Equal}}"background:white;">[https://en.wikipedia.org/wiki/Tuple tuple]</span> | ||
** '''G | ** '''G {{Equal}} (V, ω, P)''' | ||
** '''V''' is the ''alphabet'', a set of symbols including | ** '''V''' is the ''alphabet'', a set of symbols including | ||
*** those that can be replaced, termed '''variables''' or '''non-terminals''' | *** those that can be replaced, termed '''variables''' or '''non-terminals''' | ||
Line 93: | Line 94: | ||
** '''ω''' is the ''axiom'', a string of symbols from V defining the initial string (generation zero) | ** '''ω''' is the ''axiom'', a string of symbols from V defining the initial string (generation zero) | ||
** '''P''' is a set of ''production rules'' that are applied to generation ''n'' to produce generation ''n+1'' | ** '''P''' is a set of ''production rules'' that are applied to generation ''n'' to produce generation ''n+1'' | ||
}} |
Revision as of 21:39, 6 October 2019
Prerequisites[edit]
Research[edit]
- Read Emergence
- Read Lindenmayer System
- Read Terminal and Nonterminal Symbols
- View L-Systems - The Nature of Code
- Read Swift Sets
Supplemental research:
Experiment[edit]
Begin a new project:
Create an empty project named Lindenmayer within your "project" directory.
cd ~/projects
mkdir Lindenmayer
cd Lindenmayer
swift package init --type executable
Change to the source directory.
cd Sources/Lindenmayer/
Edit the file main.swift.
emacs main.swift
Now, do the following. Be sure to think and plan BEFORE typing.
Design a ProductionRule class such that rules may be constructed using the following syntax:
let productionRules = [ProductionRule(predecessor:"1", successor:"11"),
ProductionRule(predecessor:"0", successor:"1[0]0")]
Design an LSystem class such that an LSystem may be constructed using the following syntax:
let lSystem = LSystem(alphabet:["0", "1", "[", "]"], axiom:"0", productionRules:productionRules)
Implement a method for the LSystem class with the below signature which will return a set of all non-terminal (variable) characters in the alphabet. (In the above example, the non-terminals are "0" and "1".)
func nonTerminals() -> Set<Character>
Implement a method for the LSystem class with the below signature which will return a set of all terminal (constant) characters in the alphabet. (In the above example, the terminals are "[" and "]".)
func terminals() -> Set<Character>
Implement a method for the LSystem class with the below signature which will recursively produce the nth generation of the system. (In the above example the third generation would be "1111[11[1[0]0]1[0]0]11[1[0]0]1[0]0".)
func produce(generationCount:Int) -> String
As you're implementing these classes, be sure to validate input. At a minimum:
- Defining more than one production rule for the same predecessor is forbidden.
- Defining a rule for which the predecessor is not present in the alphabet is forbidden.
- Specifying an invalid axiom (i.e. an axiom for which any characters are not present in the alphabet) is forbidden.
If the input is invalid, the program should halt with a fatal error message.
Exercises[edit]
Continuing with this project:
- Validate your class' functionality by manually testing each of the aforementioned constraints on input.
- Validate your class' functionality by testing against the following LSystems:
Key Concepts[edit]
- An L-System is a Lindenmayer System
- It is a rewriting system consisting of:
- An alphabet of symbols that are used to make strings
- A set of production rules that are used to expand these symbols into a larger string of symbols
- An axiom used to construct the initial string
- A mechanism to translate the generated strings into geometric structures
- L-systems were introduced and developed in 1968 by Aristid Lindenmayer, a Hungarian theoretical biologist
- L-systems are used to model plant cell behavior and growth
- It is a rewriting system consisting of:
- An L-System is formally defined as a tuple
- G = (V, ω, P)
- V is the alphabet, a set of symbols including
- those that can be replaced, termed variables or non-terminals
- those that are not replaced, termed constants or terminals
- ω is the axiom, a string of symbols from V defining the initial string (generation zero)
- P is a set of production rules that are applied to generation n to produce generation n+1