resource slices op pass_slice_val(a[1:*] : int) op pass_slice_var(var a[1:*] : int) op pass_slice_ref(ref a[1:*] : int) body slices() proc pass_slice_val(a) fa i := 1 to ub(a) -> writes(" ", a[i]) af write() end pass_slice_val proc pass_slice_var(a) fa i := 1 to ub(a) -> a[i]++ af end pass_slice_var proc pass_slice_ref(a) fa i := 1 to ub(a) -> a[i] := -a[i] af end pass_slice_ref end slices resource driver() import slices var sc : cap slices := create slices() var n, k1, k2 : int writes("Enter the array size "); read(n) var b[1:n] : int write("Enter", n, "numbers") fa j := 1 to n -> read(b[j]) af writes("Enter the range to slice "); read(k1, k2) sc.pass_slice_var(b[k1:k2]) # sc.pass_slice_ref(b[k1:k2]) # Above line causes following compiler error message. # "slice.sr", line 30: fatal: cannot pass slice expression to ref parameter sc.pass_slice_ref(b) sc.pass_slice_val(b[1:n]) end driver /* ............... Example compile and run(s) % sr -o slice slice.sr % ./slice Enter the array size 5 Enter 5 numbers 1 3 2 4 5 Enter the range to slice 2 4 -1 -4 -3 -5 -5 */