sequence_aux.csp 1.08 KB
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
--------------------------------------------------------------------
--------------------------------------------------------------------
-- Sequence auxiliary operations
--------------------------------------------------------------------
--------------------------------------------------------------------
-- Overriding
insert(<>,i,x) = <>
insert(<y>^s,n,x) = if (n==1) then <x>^s else <y>^insert(s,n-1,x)

--------------------------------------------------------------------
-- Indexing
at(<x>^s,n) = if (n==1) then x else at(s,n-1)

--------------------------------------------------------------------
-- Sequence of 0s
zeroSeq(n) = if (n==1) then <0> else <0>^zeroSeq(n-1)
--------------------------------------------------------------------

map(f,<>) = <>
map(f,<x>^xs) = <f(x)>^(map(f,xs))

e2l(x) = <x>

addHead(e,<>) = <>
addHead(e,<x>^xs) = <<e>^x>^(addHead(e,xs))

seqCons(<>,xxs) = <>
seqCons(<x>^xs,xss) = (addHead(x,xss))^(seqCons(xs,xss))

distCartProd(<>) = <>
distCartProd(<xs>) = map(e2l,xs)
distCartProd(<xs>^xxs) = seqCons(xs, distCartProd(xxs))