Arrays: Difference between revisions

Content added Content deleted
m (→‎{{header|Phix}}: added syntax colouring the hard way, phix/basics)
Line 5,284: Line 5,284:


=={{header|Phix}}==
=={{header|Phix}}==
{{libheader|Phix/basics}}

In Phix, sequences are '''it''' - there are no other data structures to learn.
In Phix, sequences are '''it''' - there are no other data structures to learn.


Line 5,291: Line 5,291:
without any need to worry about memory management issues.
without any need to worry about memory management issues.


<lang Phix>-- simple one-dimensional arrays:
<!--<lang Phix>-->
<span style="color: #000080;font-style:italic;">-- simple one-dimensional arrays:</span>
sequence s1 = {0.5, 1, 4.7, 9}, -- length(s1) is now 4
<span style="color: #004080;">sequence</span> <span style="color: #000000;">s1</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">0.5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">4.7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- length(s1) is now 4</span>
s2 = repeat(0,6), -- s2 is {0,0,0,0,0,0}
<span style="color: #000000;">s2</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">),</span> <span style="color: #000080;font-style:italic;">-- s2 is {0,0,0,0,0,0}</span>
s3 = tagset(5) -- s3 is {1,2,3,4,5}
<span style="color: #000000;">s3</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">tagset</span><span style="color: #0000FF;">(</span><span style="color: #000000;">5</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- s3 is {1,2,3,4,5}</span>

?s1[3] -- displays 4.7 (nb 1-based indexing)
<span style="color: #0000FF;">?</span><span style="color: #000000;">s1</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span> <span style="color: #000080;font-style:italic;">-- displays 4.7 (nb 1-based indexing)</span>
s1[3] = 0 -- replace that 4.7
<span style="color: #000000;">s1</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span> <span style="color: #000080;font-style:italic;">-- replace that 4.7</span>
s1 &= {5,6} -- length(s1) is now 6 ({0.5,1,0,9,5,6})
<span style="color: #000000;">s1</span> <span style="color: #0000FF;">&=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- length(s1) is now 6 ({0.5,1,0,9,5,6})</span>
s1 = s1[2..5] -- length(s1) is now 4 ({1,0,9,5})
<span style="color: #000000;">s1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s1</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..</span><span style="color: #000000;">5</span><span style="color: #0000FF;">]</span> <span style="color: #000080;font-style:italic;">-- length(s1) is now 4 ({1,0,9,5})</span>
s1[2..3] = {2,3,4} -- length(s1) is now 5 ({1,2,3,4,5})
<span style="color: #000000;">s1</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- length(s1) is now 5 ({1,2,3,4,5})</span>
s1 = append(s1,6) -- length(s1) is now 6 ({1,2,3,4,5,6})
<span style="color: #000000;">s1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- length(s1) is now 6 ({1,2,3,4,5,6})</span>
s1 = prepend(s1,0) -- length(s1) is now 7 ({0,1,2,3,4,5,6})
<span style="color: #000000;">s1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">prepend</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- length(s1) is now 7 ({0,1,2,3,4,5,6})

-- negative subscripts can also be used, counting from the other end, eg
-- negative subscripts can also be used, counting from the other end, eg</span>
s2[-2..-1] = {-2,-1} -- s2 is now {0,0,0,0,-2,-1}
<span style="color: #000000;">s2</span><span style="color: #0000FF;">[-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- s2 is now {0,0,0,0,-2,-1}

-- multi dimensional arrays:
-- multi dimensional arrays:</span>
sequence y = {{{1,1},{3,3},{5,5}},
<span style="color: #004080;">sequence</span> <span style="color: #000000;">y</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">}},</span>
{{0,0},{0,1},{9,1}},
<span style="color: #0000FF;">{{</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">9</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">}},</span>
{{1,7},{1,1},{2,2}}}
<span style="color: #0000FF;">{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">7</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">}}}</span>
-- y[2][3][1] is 9
<span style="color: #000080;font-style:italic;">-- y[2][3][1] is 9</span>

y = repeat(repeat(repeat(0,2),3),3)
<span style="color: #000000;">y</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">),</span><span style="color: #000000;">3</span><span style="color: #0000FF;">),</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
-- same structure, but all 0s
<span style="color: #000080;font-style:italic;">-- same structure, but all 0s

-- Array of strings:
-- Array of strings:</span>
sequence s = {"Hello", "World", "Phix", "", "Last One"}
<span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"Hello"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"World"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Phix"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">""</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Last One"</span><span style="color: #0000FF;">}</span>
-- s[3] is "Phix"
-- s[3][2] is 'h'
<span style="color: #000080;font-style:italic;">-- s[3] is "Phix"
-- s[3][2] is 'h'

-- A Structure:
-- A Structure:</span>
sequence employee = {{"John","Smith"},
<span style="color: #004080;">sequence</span> <span style="color: #000000;">employee</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #008000;">"John"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Smith"</span><span style="color: #0000FF;">},</span>
45000,
27,
<span style="color: #000000;">45000</span><span style="color: #0000FF;">,</span>
185.5}
<span style="color: #000000;">27</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">185.5</span><span style="color: #0000FF;">}</span>

-- To simplify access to elements within a structure it is good programming style to define constants that name the various fields, eg:
<span style="color: #000080;font-style:italic;">-- To simplify access to elements within a structure it is good programming style to define constants that name the various fields, eg:</span>
constant SALARY = 2
<span style="color: #008080;">constant</span> <span style="color: #000000;">SALARY</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">2</span>

-- Array of structures:
<span style="color: #000080;font-style:italic;">-- Array of structures:</span>
sequence employees = {
<span style="color: #004080;">sequence</span> <span style="color: #000000;">employees</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span>
{{"Jane","Adams"}, 47000, 34, 135.5}, -- a[1]
<span style="color: #0000FF;">{{</span><span style="color: #008000;">"Jane"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Adams"</span><span style="color: #0000FF;">},</span> <span style="color: #000000;">47000</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">34</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">135.5</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- a[1]</span>
{{"Bill","Jones"}, 57000, 48, 177.2}, -- a[2]
<span style="color: #0000FF;">{{</span><span style="color: #008000;">"Bill"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Jones"</span><span style="color: #0000FF;">},</span> <span style="color: #000000;">57000</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">48</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">177.2</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- a[2]
-- .... etc.
}
-- .... etc.</span>
<span style="color: #0000FF;">}</span>
-- employees[2][SALARY] is 57000
<span style="color: #000080;font-style:italic;">-- employees[2][SALARY] is 57000

-- A tree can be represented easily, for example after adding "b","c","a" to it you might have:
-- A tree can be represented easily, for example after adding "b","c","a" to it you might have:</span>
sequence tree = {{"b",3,2},
<span style="color: #004080;">sequence</span> <span style="color: #000000;">tree</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #008000;">"b"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">},</span>
{"c",0,0},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"c"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">},</span>
{"a",0,0}}
<span style="color: #0000FF;">{</span><span style="color: #008000;">"a"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">}}</span>

-- ie assuming
<span style="color: #000080;font-style:italic;">-- ie assuming </span>
constant ROOT=1, VALUE=1, LEFT=2, RIGHT=3 -- then
<span style="color: #008080;">constant</span> <span style="color: #000000;">ROOT</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">VALUE</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">LEFT</span><span style="color: #0000FF;">=</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">RIGHT</span><span style="color: #0000FF;">=</span><span style="color: #000000;">3</span> <span style="color: #000080;font-style:italic;">-- then
-- tree[ROOT][VALUE] is "b"
-- tree[ROOT][LEFT] is 3, and tree[3] is the "a"
-- tree[ROOT][VALUE] is "b"
-- tree[ROOT][RIGHT] is 2, and tree[2] is the "c"
-- tree[ROOT][LEFT] is 3, and tree[3] is the "a"
-- tree[ROOT][RIGHT] is 2, and tree[2] is the "c"

-- The operations you might use to build such a tree (tests/loops/etc omitted) could be:
-- The operations you might use to build such a tree (tests/loops/etc omitted) could be:</span>
tree = {}
<span style="color: #000000;">tree</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span>
tree = append(tree,{"b",0,0})
<span style="color: #000000;">tree</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tree</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"b"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">})</span>
tree = append(tree,{"c",0,0})
<span style="color: #000000;">tree</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tree</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"c"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">})</span>
tree[1][RIGHT] = length(tree)
<span style="color: #000000;">tree</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">RIGHT</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tree</span><span style="color: #0000FF;">)</span>
tree = append(tree,{"a",0,0})
<span style="color: #000000;">tree</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tree</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"a"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">})</span>
tree[1][LEFT] = length(tree)
<span style="color: #000000;">tree</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">LEFT</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tree</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">-- Finally, some tests (recall that we have already output a 4.7):</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">tree</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">tree</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ROOT</span><span style="color: #0000FF;">][</span><span style="color: #000000;">VALUE</span><span style="color: #0000FF;">]</span>
<span style="color: #000000;">employees</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">employees</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">employee</span><span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">employees</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">][</span><span style="color: #000000;">SALARY</span><span style="color: #0000FF;">]</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">s1</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">s2</span>
<!--</lang>-->


-- Finally, some tests (recall that we have already output a 4.7):
?s[3]
?tree
?tree[ROOT][VALUE]
employees = append(employees, employee)
?employees[3][SALARY]
?s1
?s2</lang>
{{out}}
{{out}}
<pre>
<pre>