--- layout: default title: "Lists" parent: Composite ancestor: Funcons-beta --- [Funcons-beta] : [Lists.cbs] ----------------------------- ### Lists
[
  Datatype lists
  Funcon   list
  Funcon   list-elements
  Funcon   list-nil       Alias nil
  Funcon   list-cons      Alias cons
  Funcon   list-head      Alias head
  Funcon   list-tail      Alias tail
  Funcon   list-length
  Funcon   list-append
]
Meta-variables
  T <: values
Datatype
  lists(T) ::= list(_:(T)*)
lists(T) is the type of possibly-empty finite lists [V1,...,Vn] where V1:T, ..., Vn:T. N.B. [T] is always a single list value, and *not* interpreted as the type lists(T). The notation [V1, ..., Vn] for list(V1, ..., Vn) is built-in.
Assert
  [V*:values*] == list(V*)
Funcon
  list-elements(_:lists(T)) : =>(T)*
Rule
  list-elements(list(V*:values*)) ~> V*
Funcon
  list-nil : =>lists(_)
    ~> [ ]
Alias
  nil = list-nil
Funcon 
  list-cons(_:T, _:lists(T)) : =>lists(T)
Alias
  cons = list-cons
Rule
  list-cons(V:values, [V*:values*]) ~> [V, V*]
Funcon
  list-head(_:lists(T)) : =>(T)?
Alias
  head = list-head
Rule
  list-head[V:values, _*:values*] ~> V 
Rule
  list-head[ ] ~> ( )
Funcon
  list-tail(_:lists(T)) : =>(lists(T))?
Alias
  tail = list-tail
Rule
  list-tail[_:values, V*:values*] ~> [V*] 
Rule
  list-tail[ ] ~> ( )
Funcon
  list-length(_:lists(T)) : =>natural-numbers
Rule
  list-length[V*:values*] ~> length(V*)
Funcon
  list-append(_:(lists(T))*) : =>lists(T)
Rule
  list-append([V1*:values*], [V2*:values*]) ~> [V1*, V2*]
Rule
  list-append(L1:lists(_), L2:lists(_), L3:lists(_), L*:(lists(_))*)
   ~> list-append(L1, list-append(L2, L3, L*))
Rule
  list-append( ) ~> [ ]
Rule
  list-append(L:lists(_)) ~> L
Datatypes of infinite and possibly-infinite lists can be specified as algebraic datatypes using abstractions. ____ From the [PLanCompS Project] | [CBS-beta issues...] | [Suggest an improvement...] [Lists.cbs]: Lists.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/Lists/Lists.cbs%0A%0AComment/Query/Issue/Suggestion%3A%0A%0A%0ASignature%3A%0A "GENERATE AN EMAIL TEMPLATE"