aboutsummaryrefslogtreecommitdiff
path: root/frontend/_aconcat.icl
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/_aconcat.icl')
-rw-r--r--frontend/_aconcat.icl27
1 files changed, 25 insertions, 2 deletions
diff --git a/frontend/_aconcat.icl b/frontend/_aconcat.icl
index cf6abc1..8259980 100644
--- a/frontend/_aconcat.icl
+++ b/frontend/_aconcat.icl
@@ -36,7 +36,7 @@ where
r2={r1 & [sr-i]=e \\ i<-[1..s2] & e<-l}
r1={r0 & [i]=a.[i] \\ i<-[0..s1-1]}
/*2.0
- r0=_createArray sr // 2.0
+ r0=_createArray sr
0.2*/
//1.3
r0=_createArrayc sr
@@ -59,8 +59,31 @@ where
# (e,a1) = a1![i]
= copy_elements a1 {a2 & [i]=e} (i+1)
= (a2,a1)
-arrayCopy a s
+
+arrayCopy a
:== arrayCopyBegin a1 s
where
(s, a1)
= usize a
+
+arrayAndElementsCopy place_holder copy_element_function array
+/*2.0
+ :== copy place_holder array1 (_createArray n) 0 n
+0.2*/
+//1.3
+ :== copy place_holder array1 (_createArrayc n) 0 n
+//3.1
+ where
+ (n, array1)
+ = usize array
+ copy place_holder array array_copy i n
+ | i == n
+ = (array_copy, array)
+ // otherwise
+ # (element, array)
+ = replace array i place_holder
+ # (copy_element, element)
+ = copy_element_function element
+ # (place_holder, array)
+ = replace array i element
+ = copy place_holder array {array_copy & [i] = copy_element} (i+1) n