--- layout: default title: "Trees" parent: Composite ancestor: Funcons-beta --- [Funcons-beta] : [Trees.cbs] ----------------------------- ### Trees
[
  Datatype trees
  Funcon   tree
  Funcon   tree-root-value
  Funcon   tree-branch-sequence
  Funcon   single-branching-sequence
  Funcon   forest-root-value-sequence
  Funcon   forest-branch-sequence
  Funcon   forest-value-sequence
]
Meta-variables
  T <: values
Datatype
  trees(T) ::= tree( _:T, _:(trees(T))*)
trees(T) consists of finitely-branching trees with elements of type T. When V:T, tree(V) is a leaf, and tree(V,B1,...,Bn) is a tree with branches B1, ..., Bn.
Funcon
  tree-root-value(_:trees(T)) : =>(T)?
Rule
  tree-root-value tree(V:T, _*:(trees(T))*) ~> V
Funcon
  tree-branch-sequence(_:trees(T)) : =>(trees(T))*
Rule
  tree-branch-sequence tree(_:T, B*:(trees(T))*) ~> B*
Funcon
  single-branching-sequence(_:trees(T)) : =>T+
single-branching-sequence B extracts the values in B starting from the root, provided that B is at most single-branching; otherwise it fails.
Rule
  single-branching-sequence tree(V:T) ~> V
Rule
  single-branching-sequence tree(V:T, B:trees(T))
   ~> left-to-right( V, single-branching-sequence B)
Rule
  single-branching-sequence tree(_:T, _:trees(T), _+:(trees(T))+) ~> fail
A sequence of trees corresponds to a forest, and the selector funcons on trees B extend to forests B*:
Funcon
  forest-root-value-sequence(_:(trees(T))*) : =>T*
Rule
  forest-root-value-sequence(B:trees(T), B*:(trees(T))*)
   ~>(tree-root-value B , forest-root-value-sequence B*)
Rule
  forest-root-value-sequence( ) ~>( )
Funcon
  forest-branch-sequence(_:(trees(T))*) : =>T*
Rule
  forest-branch-sequence(B:trees(T), B*:(trees(T))*)
   ~>(tree-branch-sequence B , forest-branch-sequence B*)
Rule
  forest-branch-sequence( ) ~>( )
Funcon
  forest-value-sequence(_:(trees(T))*) : =>T*
forest-value-sequence B* provides the values from a left-to-right pre-order depth-first traversal.
Rule
  forest-value-sequence(tree(V:T, B1*:(trees(T))*), B2*:(trees(T))*)
   ~>(V , forest-value-sequence B1*, forest-value-sequence B2*)
Rule
  forest-value-sequence( ) ~>( )
Other linearizations of trees can be added: breadth-first, right-to-left, C3, etc. ____ From the [PLanCompS Project] | [CBS-beta issues...] | [Suggest an improvement...] [Trees.cbs]: Trees.cbs "CBS SOURCE FILE" [Funcons-beta]: /CBS-beta/docs/Funcons-beta "FUNCONS-BETA" [Unstable-Funcons-beta]: /CBS-beta/docs/Unstable-Funcons-beta "UNSTABLE-FUNCONS-BETA" [Languages-beta]: /CBS-beta/docs/Languages-beta "LANGUAGES-BETA" [Unstable-Languages-beta]: /CBS-beta/docs/Unstable-Languages-beta "UNSTABLE-LANGUAGES-BETA" [CBS-beta]: /CBS-beta "CBS-BETA" [PLanCompS Project]: https://plancomps.github.io "PROGRAMMING LANGUAGE COMPONENTS AND SPECIFICATIONS PROJECT HOME PAGE" [CBS-beta issues...]: https://github.com/plancomps/CBS-beta/issues "CBS-BETA ISSUE REPORTS ON GITHUB" [Suggest an improvement...]: mailto:plancomps@gmail.com?Subject=CBS-beta%20-%20comment&Body=Re%3A%20CBS-beta%20specification%20at%20Values/Composite/Trees/Trees.cbs%0A%0AComment/Query/Issue/Suggestion%3A%0A%0A%0ASignature%3A%0A "GENERATE AN EMAIL TEMPLATE"