Составные типы данных|Примеры|Предикат для проверки
--|--|--
Списки|``'(a (x #t) 10) '()`` |(list? x)
Векторы|``'#(1 2 3) (make-vector 10)``|(vector? x)
Структуры необходимо определять:|``(make-point 1.2 0.5)``|(point? x)
(define-record-type point (fields x y))| |
Хеш-таблицы|``(make-eq-hashtable)``|(hashtable? x)
### Язык Kotlin
Язык Kotlin поддерживает несколько видов целых чисел (Long, Int, Short, Byte), беззнаковые разновидности (ULong, UInt, UShort, UByte), вещественные (Double, Float), булевый (Boolean), символы (Char) и строки (String). Специальными типами являются Unit (ничто) и Any (любой тип).
```kotlin
val a=1 // Int
val oneMillion = 1_000_000 // Int
val b = 1L // Long
val c: Byte = 1 // Byte
val pi = 3.14 // Double
val f = 2.7f // Float
val g = 42u // UInt
val h1 = 0xFul // ULong
val h = 0xFFFF_FFFF_FFFFu // ULong, т.к. не помещается в UInt
val k = '0' // Char
val o = false // Boolean
val name = "Alex" // String
val s1="Hello, $name\n" // после подстановки "Hello, Alex\n"
val s2="a=${2*a} \$" // после подстановки "a=2 $"
val s3="""Hello, $name!
The price \n is ${'$'}0.99
""" // символы \ в такой строке не обрабатываются, но работают подстановки
val x: Any = 5
```
Если значение может отсутствовать, то после типа указывается символ ``?``, например, ``Int?``. Отсутствие значения отмечается как ``null``.
Составными типами данных являются пары и тройки (Pair, Triple), массивы (Array), списки (List, MutableList), множества и ассоциативные массивы (Set, HashSet, Map, HashMap).
```kotlin
val a1=arrayOf(1, 2, 3) // массив
val a2=Array(5){it*it} // массив из пяти значений 0,1,4,9,16
val l1=listOf('a','b','c') // список
val l2=List(5){2*it} // список [0,2,4,6,8]
```
Кроме этого, можно использовать классы из Java и [определять собственные классы](fp2-6.html).