src/LinkedLists.jl

Mon, 18 Nov 2019 11:00:54 -0500

author
Tuomo Valkonen <tuomov@iki.fi>
date
Mon, 18 Nov 2019 11:00:54 -0500
changeset 0
888dfd34d24a
child 3
ec9084e97e46
permissions
-rw-r--r--

Initialise

0
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
1 ####################################################################
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
2 # Immutable linked list (different from the mutable lists of
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
3 # https://github.com/ChrisRackauckas/LinkedLists.jl)
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
4 ####################################################################
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
5
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
6 module LinkedLists
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
7
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
8 ##############
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
9 # Our exports
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
10 ##############
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
11
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
12 export LinkedListEntry,
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
13 LinkedList,
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
14 unfold_linked_list
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
15
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
16 #############
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
17 # Data types
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
18 #############
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
19
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
20 struct LinkedListEntry{T}
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
21 value :: T
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
22 next :: Union{LinkedListEntry{T},Nothing}
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
23 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
24
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
25 LinkedList{T} = Union{LinkedListEntry{T},Nothing}
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
26
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
27 ############
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
28 # Functions
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
29 ############
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
30
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
31 function Base.iterate(list::LinkedList{T}) where T
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
32 return Base.iterate(list, list)
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
33 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
34
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
35 function Base.iterate(list::LinkedList{T}, tail::Nothing) where T
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
36 return nothing
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
37 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
38
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
39 function Base.iterate(list::LinkedList{T}, tail::LinkedListEntry{T}) where T
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
40 return tail.value, tail.next
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
41 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
42
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
43 # Return the items in the list with the tail first
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
44 function unfold_linked_list(list::LinkedList{T}) where T
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
45 res = []
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
46 for value ∈ list
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
47 push!(res, value)
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
48 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
49 return reverse(res)
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
50 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
51
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
52 end

mercurial