Elm - Daftar
Struktur data List, Tuples dan Record dapat digunakan untuk menyimpan kumpulan nilai.
Bab ini membahas cara menggunakan List di Elm.
Daftar adalah kumpulan nilai homogen. Semua nilai dalam daftar harus dari tipe data yang sama.
Pertimbangkan batasan berikut saat menggunakan variabel untuk menyimpan nilai -
Variabel bersifat skalar. Dengan kata lain, pada saat deklarasi variabel hanya dapat menampung satu nilai. Ini berarti bahwa untuk menyimpan nilai n dalam sebuah program, diperlukan n deklarasi variabel. Oleh karena itu, penggunaan variabel tidak layak ketika seseorang perlu menyimpan kumpulan nilai yang lebih besar.
Variabel dalam program dialokasikan memori dalam urutan acak, sehingga menyulitkan untuk mengambil / membaca nilai dalam urutan deklarasinya.
Sintaksis
List_name = [value1,value2,value3.....valuen]
Ilustrasi
Contoh berikut menunjukkan bagaimana menggunakan List di Elm. Coba contoh ini di elm REPL -
> myList1 = [10,20,30]
[10,20,30] : List number
> myList2 = ["hello","world"]
["hello","world"] : List String
Jika kita mencoba menambahkan nilai dari tipe yang berbeda ke dalam daftar, kompilator akan menampilkan kesalahan ketidakcocokan tipe. Ini ditunjukkan di bawah.
> myList = [1,"hello"]
-- TYPE MISMATCH
---------------------------------------------
repl-temp-000.elm
The 1st and 2nd entries in this list are different types of values.
4| [1,"hello"]
^^^^^^^
The 1st entry has this type:
number
But the 2nd is:
String
Daftar operasi
Tabel berikut memperlihatkan operasi umum pada Daftar -
Sr Tidak | metode | Deskripsi |
---|---|---|
1 | isEmpty: Daftar a -> Bool | memeriksa apakah daftar kosong |
2 | terbalik: Daftar a -> Bool | membalikkan daftar masukan |
3 | panjang: Daftar a -> Int | mengembalikan ukuran daftar |
4 | maksimum: Daftar yang sebanding -> Mungkin. Mungkin sebanding | mengembalikan nilai maksimum |
5 | minimum: Daftar yang sebanding -> Mungkin. Mungkin sebanding | mengembalikan nilai minimum |
6 | jumlah: Nomor daftar -> nomor | mengembalikan jumlah semua elemen dalam daftar |
7 | produk: Nomor daftar -> nomor | memeriksa apakah daftar kosong |
8 | sort: Daftar yang dapat dibandingkan -> Daftar yang dapat dibandingkan | mengurutkan daftar dalam urutan menaik |
9 | concat: Daftar (Daftar a) -> Daftar a | menggabungkan banyak daftar menjadi satu |
10 | menambahkan: Daftar a -> Daftar a -> Daftar a | menggabungkan dua daftar menjadi satu |
11 | range: Int -> Int -> List Int | mengembalikan daftar nomor dari awal sampai akhir |
12 | filter: (a -> Bool) -> Daftar a -> Daftar a | filter daftar nilai dari daftar masukan |
13 | head: Daftar a -> Mungkin. Mungkin a | mengembalikan elemen pertama dari daftar |
14 | tail :: List a -> Maybe.Maybe (Daftar a) | mengembalikan semua elemen kecuali kepala |
kosong
Fungsi ini mengembalikan nilai true jika daftar kosong.
Sintaksis
List.isEmpty list_name
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.isEmpty
<function> : List a -> Bool
Ilustrasi
> List.isEmpty
<function> : List a -> Bool
> List.isEmpty [10,20,30]
False : Bool
balik
Fungsi ini membalikkan daftar.
Sintaksis
List.reverse list_name
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.reverse
<function> : List a -> List a
Ilustrasi
> List.reverse [10,20,30]
[30,20,10] : List number
panjangnya
Fungsi ini mengembalikan panjang daftar.
Sintaksis
List.length list_name
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.length
<function> : List a -> Int
Ilustrasi
> List.length [10,20,30]
3 : Int
maksimum
Fungsi ini mengembalikan elemen maksimum dalam daftar yang tidak kosong.
Sintaksis
List.maximum list_name
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.maximum
<function> : List comparable -> Maybe.Maybe comparable
Ilustrasi
> List.maximum [10,20,30]
Just 30 : Maybe.Maybe number
> List.maximum []
Nothing : Maybe.Maybe comparable
minimum
Fungsi ini mengembalikan elemen minimum dalam daftar yang tidak kosong.
Sintaksis
List.minimum list_name
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.minimum
<function> : List comparable -> Maybe.Maybe comparable
Ilustrasi
> List.minimum [10,20,30]
Just 10 : Maybe.Maybe number
jumlah
Fungsi ini mengembalikan jumlah semua elemen dalam daftar.
Sintaksis
List.sum list_name
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.sum
<function> : List number -> number
Ilustrasi
> List.sum [10,20,30]
60 : number
produk
Fungsi ini mengembalikan produk dari semua elemen dalam daftar.
Sintaksis
List.product list_name
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
<function> : List number -> number
Ilustrasi
List.product [10,20,30]
6000 : number
menyortir
Fungsi ini mengurutkan nilai dari terendah hingga tertinggi dalam daftar.
Sintaksis
List.sort list_name
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.sort
<function> : List comparable -> List comparable
Ilustrasi
> List.sort [10,20,30]
[10,20,30] : List number
concat
Fungsi ini menggabungkan banyak daftar menjadi satu daftar.
Sintaksis
List.concat [ [list_name1],[list_name2],[list_name3],.....[list_nameN] ]
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.concat
<function> : List (List a) -> List a
Ilustrasi
> List.concat [[10,20], [30,40],[50,60]]
[10,20,30,40,50,60] : List number
menambahkan
Fungsi ini menyatukan dua daftar.
Sintaksis
List.append [list_name1] [list_name2]
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.append
<function> : List a -> List a -> List a
Ilustrasi
> List.append [10,20] [30,40]
[10,20,30,40] : List number
Operator ++ juga dapat digunakan untuk menambahkan daftar ke yang lain. Ini ditunjukkan pada contoh di bawah -
> [10.1,20.2] ++ [30.3,40.4]
[10.1,20.2,30.3,40.4] : List Float
jarak
Fungsi ini membuat daftar angka, setiap elemen bertambah satu. Angka terendah dan tertinggi yang harus ada dalam daftar diteruskan ke fungsi.
Sintaksis
List.range start_range end_range
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.range
<function> : Int -> Int -> List Int
Ilustrasi
> List.range 1 10
[1,2,3,4,5,6,7,8,9,10] : List Int
Saring
Fungsi ini memfilter sekumpulan nilai dari daftar input. Simpan hanya nilai yang lulus ujian.
Sintaksis
List.filter test_function input_list
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.filter
<function> : (a -> Bool) -> List a -> List a
Ilustrasi
Contoh berikut memfilter semua bilangan genap dari daftar input
> List.filter (\n -> n%2==0) [10,20,30,55]
[10,20,30] : List Int
kepala
Fungsi ini mengembalikan elemen pertama dari daftar masukan.
Sintaksis
List.head input_list
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.head
<function> : List a -> Maybe.Maybe a
Ilustrasi
> List.head [10,20,30,40]
Just 10 : Maybe.Maybe number
> List.head []
Nothing : Maybe.Maybe a
ekor
Fungsi ini mengembalikan semua elemen setelah yang pertama dalam daftar.
Sintaksis
List.tail input_list
Untuk memeriksa tanda tangan fungsi, ketik berikut ini di elm REPL -
> List.tail
<function> : List a -> Maybe.Maybe (List a)
Ilustrasi
> List.tail [10,20,30,40,50]
Just [20,30,40,50] : Maybe.Maybe (List number)
> List.tail [10]
Just [] : Maybe.Maybe (List number)
> List.tail []
Nothing : Maybe.Maybe (List a)
Menggunakan Operator Kontra
Operator kontra (::) menambahkan elemen ke depan daftar.
Ilustrasi
> 10::[20,30,40,50]
[10,20,30,40,50] : List number
Elemen baru yang akan ditambahkan dan tipe data dari nilai dalam daftar harus cocok. Kompilator membuat kesalahan jika tipe datanya tidak cocok.
> [1,2,3,4]::[5,6,7,8]
-- TYPE MISMATCH ---------------------------------
------------ repl-temp-000.elm
The right side of (::) is causing a type mismatch.
3| [1,2,3,4]::[5,6,7,8]
^^^^^^^^^
(::) is expecting the right side to be a:
List (List number)
But the right side is:
List number
Hint: With operators like (::) I always check the left side first. If it seems fine,
I assume it is correct and check the right side. So the
problem may be in how the left and right arguments interact.
Daftar tidak dapat diubah
Mari kita periksa apakah daftar tidak dapat diubah di Elm. Daftar pertama myList ketika digabungkan dengan nilai 1 membuat daftar baru dan dikembalikan ke myListCopy . Oleh karena itu, jika kita menampilkan daftar awal, nilainya tidak akan berubah.
> myList = [10,20,30]
[10,20,30] : List number
> myListCopy = 1::myList
[1,10,20,30] : List number
> myList
[10,20,30] : List number
>myList == myListCopy
False : Bool