sequtils.html 189 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <!-- This file is generated by Nim. -->
  4. <html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8. <title>std/sequtils</title>
  9. <!-- Google fonts -->
  10. <link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
  11. <link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
  12. <!-- Favicon -->
  13. <link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
  14. <link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
  15. <!-- CSS -->
  16. <link rel="stylesheet" type="text/css" href="nimdoc.out.css?v=2.3.1">
  17. <!-- JS -->
  18. <script type="text/javascript" src="dochack.js?v=2.3.1"></script>
  19. </head>
  20. <body>
  21. <div class="document" id="documentId">
  22. <div class="container">
  23. <h1 class="title">std/sequtils</h1>
  24. <div class="row">
  25. <div class="three columns">
  26. <div class="theme-select-wrapper">
  27. <label for="theme-select">Theme:&nbsp;</label>
  28. <select id="theme-select" onchange="setTheme(this.value)">
  29. <option value="auto">🌗 Match OS</option>
  30. <option value="dark">🌑 Dark</option>
  31. <option value="light">🌕 Light</option>
  32. </select>
  33. </div>
  34. <div id="global-links">
  35. <ul class="simple-boot">
  36. <li><a href="manual.html">Manual</a></li>
  37. <li><a href="lib.html">Standard library</a></li>
  38. <li> <a id="indexLink" href="theindex.html">Index</a></li>
  39. <li><a href="compiler/theindex.html">Compiler docs</a></li>
  40. <li><a href="https://nim-lang.github.io/fusion/theindex.html">Fusion docs</a></li>
  41. <li><a href="https://nim-lang.github.io/Nim/">devel</a>, <a href="https://nim-lang.org/documentation.html">stable</a></li>
  42. </ul>
  43. </div>
  44. <div id="searchInputDiv">
  45. Search: <input type="search" id="searchInput"
  46. oninput="search()" />
  47. </div>
  48. <ul class="simple simple-toc" id="toc-list">
  49. <li><a class="reference" id="see-also_toc" href="#see-also">See also</a></li>
  50. <li>
  51. <a class="reference reference-toplevel" href="#6" id="56">Imports</a>
  52. </li>
  53. <li>
  54. <details open>
  55. <summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
  56. <ul class="simple simple-toc-section">
  57. <ul class="simple nested-toc-section">addUnique
  58. <li><a class="reference" href="#addUnique%2Cseq%5BT%5D%2CsinkT" title="addUnique[T](s: var seq[T]; x: sink T)">addUnique[T](s: var seq[T]; x: sink T)</a></li>
  59. </ul>
  60. <ul class="simple nested-toc-section">all
  61. <li><a class="reference" href="#all%2CopenArray%5BT%5D%2Cproc%28T%29" title="all[T](s: openArray[T]; pred: proc (x: T): bool {.closure.}): bool">all[T](s: openArray[T]; pred: proc (x: T): bool {.closure.}): bool</a></li>
  62. </ul>
  63. <ul class="simple nested-toc-section">any
  64. <li><a class="reference" href="#any%2CopenArray%5BT%5D%2Cproc%28T%29" title="any[T](s: openArray[T]; pred: proc (x: T): bool {.closure.}): bool">any[T](s: openArray[T]; pred: proc (x: T): bool {.closure.}): bool</a></li>
  65. </ul>
  66. <ul class="simple nested-toc-section">apply
  67. <li><a class="reference" href="#apply%2CopenArray%5BT%5D%2Cproc%28T%29_3" title="apply[T](s: openArray[T]; op: proc (x: T) {.closure.})">apply[T](s: openArray[T]; op: proc (x: T) {.closure.})</a></li>
  68. <li><a class="reference" href="#apply%2CopenArray%5BT%5D%2Cproc%28T%29_2" title="apply[T](s: var openArray[T]; op: proc (x: T): T {.closure.})">apply[T](s: var openArray[T]; op: proc (x: T): T {.closure.})</a></li>
  69. <li><a class="reference" href="#apply%2CopenArray%5BT%5D%2Cproc%28T%29" title="apply[T](s: var openArray[T]; op: proc (x: var T) {.closure.})">apply[T](s: var openArray[T]; op: proc (x: var T) {.closure.})</a></li>
  70. </ul>
  71. <ul class="simple nested-toc-section">concat
  72. <li><a class="reference" href="#concat%2Cvarargs%5Bseq%5BT%5D%5D" title="concat[T](seqs: varargs[seq[T]]): seq[T]">concat[T](seqs: varargs[seq[T]]): seq[T]</a></li>
  73. </ul>
  74. <ul class="simple nested-toc-section">count
  75. <li><a class="reference" href="#count%2CopenArray%5BT%5D%2CT" title="count[T](s: openArray[T]; x: T): int">count[T](s: openArray[T]; x: T): int</a></li>
  76. </ul>
  77. <ul class="simple nested-toc-section">cycle
  78. <li><a class="reference" href="#cycle%2CopenArray%5BT%5D%2CNatural" title="cycle[T](s: openArray[T]; n: Natural): seq[T]">cycle[T](s: openArray[T]; n: Natural): seq[T]</a></li>
  79. </ul>
  80. <ul class="simple nested-toc-section">deduplicate
  81. <li><a class="reference" href="#deduplicate%2CopenArray%5BT%5D%2Cbool" title="deduplicate[T](s: openArray[T]; isSorted: bool = false): seq[T]">deduplicate[T](s: openArray[T]; isSorted: bool = false): seq[T]</a></li>
  82. </ul>
  83. <ul class="simple nested-toc-section">delete
  84. <li><a class="reference" href="#delete%2Cseq%5BT%5D%2CNatural%2CNatural" title="delete[T](s: var seq[T]; first, last: Natural)">delete[T](s: var seq[T]; first, last: Natural)</a></li>
  85. <li><a class="reference" href="#delete%2Cseq%5BT%5D%2CSlice%5Bint%5D" title="delete[T](s: var seq[T]; slice: Slice[int])">delete[T](s: var seq[T]; slice: Slice[int])</a></li>
  86. </ul>
  87. <ul class="simple nested-toc-section">distribute
  88. <li><a class="reference" href="#distribute%2Cseq%5BT%5D%2CPositive" title="distribute[T](s: seq[T]; num: Positive; spread = true): seq[seq[T]]">distribute[T](s: seq[T]; num: Positive; spread = true): seq[seq[T]]</a></li>
  89. </ul>
  90. <ul class="simple nested-toc-section">filter
  91. <li><a class="reference" href="#filter%2CopenArray%5BT%5D%2Cproc%28T%29" title="filter[T](s: openArray[T]; pred: proc (x: T): bool {.closure.}): seq[T]">filter[T](s: openArray[T]; pred: proc (x: T): bool {.closure.}): seq[T]</a></li>
  92. </ul>
  93. <ul class="simple nested-toc-section">insert
  94. <li><a class="reference" href="#insert%2Cseq%5BT%5D%2CopenArray%5BT%5D%2Cint" title="insert[T](dest: var seq[T]; src: openArray[T]; pos = 0)">insert[T](dest: var seq[T]; src: openArray[T]; pos = 0)</a></li>
  95. </ul>
  96. <ul class="simple nested-toc-section">keepIf
  97. <li><a class="reference" href="#keepIf%2Cseq%5BT%5D%2Cproc%28T%29" title="keepIf[T](s: var seq[T]; pred: proc (x: T): bool {.closure.})">keepIf[T](s: var seq[T]; pred: proc (x: T): bool {.closure.})</a></li>
  98. </ul>
  99. <ul class="simple nested-toc-section">map
  100. <li><a class="reference" href="#map%2CopenArray%5BT%5D%2Cproc%28T%29" title="map[T, S](s: openArray[T]; op: proc (x: T): S {.closure.}): seq[S]">map[T, S](s: openArray[T]; op: proc (x: T): S {.closure.}): seq[S]</a></li>
  101. </ul>
  102. <ul class="simple nested-toc-section">maxIndex
  103. <li><a class="reference" href="#maxIndex%2CopenArray%5BT%5D" title="maxIndex[T](s: openArray[T]): int">maxIndex[T](s: openArray[T]): int</a></li>
  104. </ul>
  105. <ul class="simple nested-toc-section">minIndex
  106. <li><a class="reference" href="#minIndex%2CopenArray%5BT%5D" title="minIndex[T](s: openArray[T]): int">minIndex[T](s: openArray[T]): int</a></li>
  107. </ul>
  108. <ul class="simple nested-toc-section">minmax
  109. <li><a class="reference" href="#minmax%2CopenArray%5BT%5D" title="minmax[T](x: openArray[T]): (T, T)">minmax[T](x: openArray[T]): (T, T)</a></li>
  110. </ul>
  111. <ul class="simple nested-toc-section">repeat
  112. <li><a class="reference" href="#repeat%2CT%2CNatural" title="repeat[T](x: T; n: Natural): seq[T]">repeat[T](x: T; n: Natural): seq[T]</a></li>
  113. </ul>
  114. <ul class="simple nested-toc-section">unzip
  115. <li><a class="reference" href="#unzip%2CopenArray%5B%5D" title="unzip[S, T](s: openArray[(S, T)]): (seq[S], seq[T])">unzip[S, T](s: openArray[(S, T)]): (seq[S], seq[T])</a></li>
  116. </ul>
  117. <ul class="simple nested-toc-section">zip
  118. <li><a class="reference" href="#zip%2C%2C" title="zip[S, T](s1: openArray[S]; s2: openArray[T]): seq[(S, T)]">zip[S, T](s1: openArray[S]; s2: openArray[T]): seq[(S, T)]</a></li>
  119. </ul>
  120. </ul>
  121. </details>
  122. </li>
  123. <li>
  124. <details open>
  125. <summary><a class="reference reference-toplevel" href="#15" id="65">Iterators</a></summary>
  126. <ul class="simple simple-toc-section">
  127. <ul class="simple nested-toc-section">filter
  128. <li><a class="reference" href="#filter.i%2CopenArray%5BT%5D%2Cproc%28T%29" title="filter[T](s: openArray[T]; pred: proc (x: T): bool {.closure.}): T">filter[T](s: openArray[T]; pred: proc (x: T): bool {.closure.}): T</a></li>
  129. </ul>
  130. <ul class="simple nested-toc-section">items
  131. <li><a class="reference" href="#items.i" title="items[T](xs: iterator (): T): T">items[T](xs: iterator (): T): T</a></li>
  132. </ul>
  133. </ul>
  134. </details>
  135. </li>
  136. <li>
  137. <details open>
  138. <summary><a class="reference reference-toplevel" href="#17" id="67">Macros</a></summary>
  139. <ul class="simple simple-toc-section">
  140. <ul class="simple nested-toc-section">mapLiterals
  141. <li><a class="reference" href="#mapLiterals.m%2Cuntyped%2Cuntyped" title="mapLiterals(constructor, op: untyped; nested = true): untyped">mapLiterals(constructor, op: untyped; nested = true): untyped</a></li>
  142. </ul>
  143. </ul>
  144. </details>
  145. </li>
  146. <li>
  147. <details open>
  148. <summary><a class="reference reference-toplevel" href="#18" id="68">Templates</a></summary>
  149. <ul class="simple simple-toc-section">
  150. <ul class="simple nested-toc-section">allIt
  151. <li><a class="reference" href="#allIt.t%2Cuntyped%2Cuntyped" title="allIt(s, pred: untyped): bool">allIt(s, pred: untyped): bool</a></li>
  152. </ul>
  153. <ul class="simple nested-toc-section">anyIt
  154. <li><a class="reference" href="#anyIt.t%2Cuntyped%2Cuntyped" title="anyIt(s, pred: untyped): bool">anyIt(s, pred: untyped): bool</a></li>
  155. </ul>
  156. <ul class="simple nested-toc-section">applyIt
  157. <li><a class="reference" href="#applyIt.t%2Cuntyped%2Cuntyped" title="applyIt(varSeq, op: untyped)">applyIt(varSeq, op: untyped)</a></li>
  158. </ul>
  159. <ul class="simple nested-toc-section">countIt
  160. <li><a class="reference" href="#countIt.t%2Cuntyped%2Cuntyped" title="countIt(s, pred: untyped): int">countIt(s, pred: untyped): int</a></li>
  161. </ul>
  162. <ul class="simple nested-toc-section">filterIt
  163. <li><a class="reference" href="#filterIt.t%2Cuntyped%2Cuntyped" title="filterIt(s, pred: untyped): untyped">filterIt(s, pred: untyped): untyped</a></li>
  164. </ul>
  165. <ul class="simple nested-toc-section">foldl
  166. <li><a class="reference" href="#foldl.t%2C%2C%2C" title="foldl(sequence, operation, first): untyped">foldl(sequence, operation, first): untyped</a></li>
  167. <li><a class="reference" href="#foldl.t%2Cuntyped%2Cuntyped" title="foldl(sequence, operation: untyped): untyped">foldl(sequence, operation: untyped): untyped</a></li>
  168. </ul>
  169. <ul class="simple nested-toc-section">foldr
  170. <li><a class="reference" href="#foldr.t%2Cuntyped%2Cuntyped" title="foldr(sequence, operation: untyped): untyped">foldr(sequence, operation: untyped): untyped</a></li>
  171. </ul>
  172. <ul class="simple nested-toc-section">keepItIf
  173. <li><a class="reference" href="#keepItIf.t%2Cseq%2Cuntyped" title="keepItIf(varSeq: seq; pred: untyped)">keepItIf(varSeq: seq; pred: untyped)</a></li>
  174. </ul>
  175. <ul class="simple nested-toc-section">mapIt
  176. <li><a class="reference" href="#mapIt.t%2Ctyped%2Cuntyped" title="mapIt(s: typed; op: untyped): untyped">mapIt(s: typed; op: untyped): untyped</a></li>
  177. </ul>
  178. <ul class="simple nested-toc-section">newSeqWith
  179. <li><a class="reference" href="#newSeqWith.t%2Cint%2Cuntyped" title="newSeqWith(len: int; init: untyped): untyped">newSeqWith(len: int; init: untyped): untyped</a></li>
  180. </ul>
  181. <ul class="simple nested-toc-section">toSeq
  182. <li><a class="reference" href="#toSeq.t%2Cuntyped" title="toSeq(iter: untyped): untyped">toSeq(iter: untyped): untyped</a></li>
  183. </ul>
  184. </ul>
  185. </details>
  186. </li>
  187. </ul>
  188. </div>
  189. <div class="nine columns" id="content">
  190. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L1" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  191. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L1" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  192. <div id="tocRoot"></div>
  193. <p class="module-desc">Although this module has <tt class="docutils literal"><span class="pre"><span class="Identifier">seq</span></span></tt> in its name, it implements operations not only for the <span id="seq_1">seq</span> type, but for three built-in container types under the <tt class="docutils literal"><span class="pre"><span class="Identifier">openArray</span></span></tt> umbrella:<ul class="simple"><li>sequences</li>
  194. <li>strings</li>
  195. <li>array</li>
  196. </ul>
  197. <p>The <tt class="docutils literal"><span class="pre"><span class="Identifier">system</span></span></tt> module defines several common functions, such as:</p>
  198. <ul class="simple"><li><tt class="docutils literal"><span class="pre"><span class="Identifier">newSeq</span><span class="Punctuation">[</span><span class="Identifier">T</span><span class="Punctuation">]</span></span></tt> for creating new sequences of type <tt class="docutils literal"><span class="pre"><span class="Identifier">T</span></span></tt></li>
  199. <li><tt class="docutils literal"><span class="pre"><span class="Operator">@</span></span></tt> for converting arrays and strings to sequences</li>
  200. <li><tt class="docutils literal"><span class="pre"><span class="Identifier">add</span></span></tt> for adding new elements to strings and sequences</li>
  201. <li><tt class="docutils literal"><span class="pre"><span class="Operator">&amp;</span></span></tt> for string and seq concatenation</li>
  202. <li><tt class="docutils literal"><span class="pre"><span class="Keyword">in</span></span></tt> (alias for <tt class="docutils literal"><span class="pre"><span class="Identifier">contains</span></span></tt>) and <tt class="docutils literal"><span class="pre"><span class="Keyword">notin</span></span></tt> for checking if an item is in a container</li>
  203. </ul>
  204. <p>This module builds upon that, providing additional functionality in form of procs, iterators and templates inspired by functional programming languages.</p>
  205. <p>For functional style programming you have different options at your disposal:</p>
  206. <ul class="simple"><li>the <a class="reference external" href="sugar.html#collect.m%2Cuntyped%2Cuntyped">sugar.collect macro</a></li>
  207. <li>pass an <a class="reference external" href="manual.html#procedures-anonymous-procs">anonymous proc</a></li>
  208. <li>import the <a class="reference external" href="sugar.html">sugar module</a> and use the <a class="reference external" href="sugar.html#%3D&gt;.m,untyped,untyped">=&gt; macro</a></li>
  209. <li>use <a class="reference external" href="#18">...It templates</a> (<a class="reference external" href="#mapIt.t,typed,untyped">mapIt</a>, <a class="reference external" href="#filterIt.t,untyped,untyped">filterIt</a>, etc.)</li>
  210. </ul>
  211. <p>Chaining of functions is possible thanks to the <a class="reference external" href="manual.html#procedures-method-call-syntax">method call syntax</a>.</p>
  212. <p><strong class="examples_text">Example:</strong></p>
  213. <pre class="listing"><span class="Keyword">import</span> <span class="Identifier">std</span><span class="Operator">/</span><span class="Identifier">sequtils</span>
  214. <span class="Keyword">import</span> <span class="Identifier">std</span><span class="Operator">/</span><span class="Identifier">sugar</span>
  215. <span class="Comment"># Creating a sequence from 1 to 10, multiplying each member by 2,</span>
  216. <span class="Comment"># keeping only the members which are not divisible by 6.</span>
  217. <span class="Keyword">let</span>
  218. <span class="Identifier">foo</span> <span class="Operator">=</span> <span class="Identifier">toSeq</span><span class="Punctuation">(</span><span class="FloatNumber">1.</span><span class="Operator">.</span><span class="DecNumber">10</span><span class="Punctuation">)</span><span class="Operator">.</span><span class="Identifier">map</span><span class="Punctuation">(</span><span class="Identifier">x</span> <span class="Operator">=&gt;</span> <span class="Identifier">x</span> <span class="Operator">*</span> <span class="DecNumber">2</span><span class="Punctuation">)</span><span class="Operator">.</span><span class="Identifier">filter</span><span class="Punctuation">(</span><span class="Identifier">x</span> <span class="Operator">=&gt;</span> <span class="Identifier">x</span> <span class="Keyword">mod</span> <span class="DecNumber">6</span> <span class="Operator">!=</span> <span class="DecNumber">0</span><span class="Punctuation">)</span>
  219. <span class="Identifier">bar</span> <span class="Operator">=</span> <span class="Identifier">toSeq</span><span class="Punctuation">(</span><span class="FloatNumber">1.</span><span class="Operator">.</span><span class="DecNumber">10</span><span class="Punctuation">)</span><span class="Operator">.</span><span class="Identifier">mapIt</span><span class="Punctuation">(</span><span class="Identifier">it</span> <span class="Operator">*</span> <span class="DecNumber">2</span><span class="Punctuation">)</span><span class="Operator">.</span><span class="Identifier">filterIt</span><span class="Punctuation">(</span><span class="Identifier">it</span> <span class="Keyword">mod</span> <span class="DecNumber">6</span> <span class="Operator">!=</span> <span class="DecNumber">0</span><span class="Punctuation">)</span>
  220. <span class="Identifier">baz</span> <span class="Operator">=</span> <span class="Identifier">collect</span><span class="Punctuation">:</span>
  221. <span class="Keyword">for</span> <span class="Identifier">i</span> <span class="Keyword">in</span> <span class="FloatNumber">1.</span><span class="Operator">.</span><span class="DecNumber">10</span><span class="Punctuation">:</span>
  222. <span class="Keyword">let</span> <span class="Identifier">j</span> <span class="Operator">=</span> <span class="DecNumber">2</span> <span class="Operator">*</span> <span class="Identifier">i</span>
  223. <span class="Keyword">if</span> <span class="Identifier">j</span> <span class="Keyword">mod</span> <span class="DecNumber">6</span> <span class="Operator">!=</span> <span class="DecNumber">0</span><span class="Punctuation">:</span>
  224. <span class="Identifier">j</span>
  225. <span class="Identifier">doAssert</span> <span class="Identifier">foo</span> <span class="Operator">==</span> <span class="Identifier">bar</span>
  226. <span class="Identifier">doAssert</span> <span class="Identifier">foo</span> <span class="Operator">==</span> <span class="Identifier">baz</span>
  227. <span class="Identifier">doAssert</span> <span class="Identifier">foo</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">,</span> <span class="DecNumber">10</span><span class="Punctuation">,</span> <span class="DecNumber">14</span><span class="Punctuation">,</span> <span class="DecNumber">16</span><span class="Punctuation">,</span> <span class="DecNumber">20</span><span class="Punctuation">]</span>
  228. <span class="Identifier">doAssert</span> <span class="Identifier">foo</span><span class="Operator">.</span><span class="Identifier">any</span><span class="Punctuation">(</span><span class="Identifier">x</span> <span class="Operator">=&gt;</span> <span class="Identifier">x</span> <span class="Operator">&gt;</span> <span class="DecNumber">17</span><span class="Punctuation">)</span>
  229. <span class="Identifier">doAssert</span> <span class="Keyword">not</span> <span class="Identifier">bar</span><span class="Operator">.</span><span class="Identifier">allIt</span><span class="Punctuation">(</span><span class="Identifier">it</span> <span class="Operator">&lt;</span> <span class="DecNumber">20</span><span class="Punctuation">)</span>
  230. <span class="Identifier">doAssert</span> <span class="Identifier">foo</span><span class="Operator">.</span><span class="Identifier">foldl</span><span class="Punctuation">(</span><span class="Identifier">a</span> <span class="Operator">+</span> <span class="Identifier">b</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">74</span> <span class="Comment"># sum of all members</span></pre>
  231. <p><strong class="examples_text">Example:</strong></p>
  232. <pre class="listing"><span class="Keyword">import</span> <span class="Identifier">std</span><span class="Operator">/</span><span class="Identifier">sequtils</span>
  233. <span class="Keyword">from</span> <span class="Identifier">std</span><span class="Operator">/</span><span class="Identifier">strutils</span> <span class="Keyword">import</span> <span class="Identifier">join</span>
  234. <span class="Keyword">let</span>
  235. <span class="Identifier">vowels</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="StringLit">&quot;aeiou&quot;</span>
  236. <span class="Identifier">foo</span> <span class="Operator">=</span> <span class="StringLit">&quot;sequtils is an awesome module&quot;</span>
  237. <span class="Identifier">doAssert</span> <span class="Punctuation">(</span><span class="Identifier">vowels</span> <span class="Keyword">is</span> <span class="Identifier">seq</span><span class="Punctuation">[</span><span class="Identifier">char</span><span class="Punctuation">]</span><span class="Punctuation">)</span> <span class="Keyword">and</span> <span class="Punctuation">(</span><span class="Identifier">vowels</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Punctuation">'</span><span class="Identifier">a</span><span class="CharLit">', '</span><span class="Identifier">e</span><span class="CharLit">', '</span><span class="Identifier">i</span><span class="CharLit">', '</span><span class="Identifier">o</span><span class="CharLit">', '</span><span class="Identifier">u</span><span class="CharLit">'])</span>
  238. <span class="Identifier">doAssert</span> <span class="Identifier">foo</span><span class="Operator">.</span><span class="Identifier">filterIt</span><span class="Punctuation">(</span><span class="Identifier">it</span> <span class="Keyword">notin</span> <span class="Identifier">vowels</span><span class="Punctuation">)</span><span class="Operator">.</span><span class="Identifier">join</span> <span class="Operator">==</span> <span class="StringLit">&quot;sqtls s n wsm mdl&quot;</span></pre>
  239. <h1><a class="toc-backref" id="see-also" href="#see-also">See also</a></h1><ul class="simple"><li><a class="reference external" href="strutils.html">strutils module</a> for common string functions</li>
  240. <li><a class="reference external" href="sugar.html">sugar module</a> for syntactic sugar macros</li>
  241. <li><a class="reference external" href="algorithm.html">algorithm module</a> for common generic algorithms</li>
  242. <li><a class="reference external" href="json.html">json module</a> for a structure which allows heterogeneous members</li>
  243. </ul>
  244. </p>
  245. <div class="section" id="6">
  246. <h1><a class="toc-backref" href="#6">Imports</a></h1>
  247. <dl class="item">
  248. <a class="reference external" href="since.html">since</a>, <a class="reference external" href="macros.html">macros</a>, <a class="reference external" href="typetraits.html">typetraits</a>, <a class="reference external" href="assertions.html">assertions</a>
  249. </dl>
  250. </div>
  251. <div class="section" id="12">
  252. <h1><a class="toc-backref" href="#12">Procs</a></h1>
  253. <dl class="item">
  254. <div id="addUnique-procs-all">
  255. <div id="addUnique,seq[T],sinkT">
  256. <dt><pre><span class="Keyword">func</span> <a href="#addUnique%2Cseq%5BT%5D%2CsinkT"><span class="Identifier">addUnique</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">x</span><span class="Other">:</span> <a href="system.html#sink"><span class="Identifier">sink</span></a> <span class="Identifier">T</span><span class="Other">)</span></pre></dt>
  257. <dd>
  258. Adds <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt> to the container <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> if it is not already present. Uses <tt class="docutils literal"><span class="pre"><span class="Operator">==</span></span></tt> to check if the item is already present.
  259. <p><strong class="examples_text">Example:</strong></p>
  260. <pre class="listing"><span class="Keyword">var</span> <span class="Identifier">a</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">]</span>
  261. <span class="Identifier">a</span><span class="Operator">.</span><span class="Identifier">addUnique</span><span class="Punctuation">(</span><span class="DecNumber">4</span><span class="Punctuation">)</span>
  262. <span class="Identifier">a</span><span class="Operator">.</span><span class="Identifier">addUnique</span><span class="Punctuation">(</span><span class="DecNumber">4</span><span class="Punctuation">)</span>
  263. <span class="Identifier">assert</span> <span class="Identifier">a</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span></pre>
  264. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L144" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  265. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L144" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  266. </dd>
  267. </div>
  268. </div>
  269. <div id="all-procs-all">
  270. <div id="all,openArray[T],proc(T)">
  271. <dt><pre><span class="Keyword">proc</span> <a href="#all%2CopenArray%5BT%5D%2Cproc%28T%29"><span class="Identifier">all</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">pred</span><span class="Other">:</span> <span class="Keyword">proc</span> <span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.<span class="Identifier">closure</span>.}<span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.
  272. <span class="Identifier">effectsOf</span><span class="Other">:</span> <span class="Identifier">pred</span>.}</pre></dt>
  273. <dd>
  274. <p>Iterates through a container and checks if every item fulfills the predicate.</p>
  275. <p><strong>See also:</strong></p>
  276. <ul class="simple"><li><a class="reference external" href="#allIt.t,untyped,untyped">allIt template</a></li>
  277. <li><a class="reference external" href="#any,openArray[T],proc(T)">any proc</a></li>
  278. </ul>
  279. <p><strong class="examples_text">Example:</strong></p>
  280. <pre class="listing"><span class="Keyword">let</span> <span class="Identifier">numbers</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">,</span> <span class="DecNumber">9</span><span class="Punctuation">,</span> <span class="DecNumber">7</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span>
  281. <span class="Identifier">assert</span> <span class="Identifier">all</span><span class="Punctuation">(</span><span class="Identifier">numbers</span><span class="Punctuation">,</span> <span class="Keyword">proc</span> <span class="Punctuation">(</span><span class="Identifier">x</span><span class="Punctuation">:</span> <span class="Identifier">int</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">bool</span> <span class="Operator">=</span> <span class="Identifier">x</span> <span class="Operator">&lt;</span> <span class="DecNumber">10</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="Identifier">true</span>
  282. <span class="Identifier">assert</span> <span class="Identifier">all</span><span class="Punctuation">(</span><span class="Identifier">numbers</span><span class="Punctuation">,</span> <span class="Keyword">proc</span> <span class="Punctuation">(</span><span class="Identifier">x</span><span class="Punctuation">:</span> <span class="Identifier">int</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">bool</span> <span class="Operator">=</span> <span class="Identifier">x</span> <span class="Operator">&lt;</span> <span class="DecNumber">9</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="Identifier">false</span></pre>
  283. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L722" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  284. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L722" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  285. </dd>
  286. </div>
  287. </div>
  288. <div id="any-procs-all">
  289. <div id="any,openArray[T],proc(T)">
  290. <dt><pre><span class="Keyword">proc</span> <a href="#any%2CopenArray%5BT%5D%2Cproc%28T%29"><span class="Identifier">any</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">pred</span><span class="Other">:</span> <span class="Keyword">proc</span> <span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.<span class="Identifier">closure</span>.}<span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.
  291. <span class="Identifier">effectsOf</span><span class="Other">:</span> <span class="Identifier">pred</span>.}</pre></dt>
  292. <dd>
  293. <p>Iterates through a container and checks if at least one item fulfills the predicate.</p>
  294. <p><strong>See also:</strong></p>
  295. <ul class="simple"><li><a class="reference external" href="#anyIt.t,untyped,untyped">anyIt template</a></li>
  296. <li><a class="reference external" href="#all,openArray[T],proc(T)">all proc</a></li>
  297. </ul>
  298. <p><strong class="examples_text">Example:</strong></p>
  299. <pre class="listing"><span class="Keyword">let</span> <span class="Identifier">numbers</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">,</span> <span class="DecNumber">9</span><span class="Punctuation">,</span> <span class="DecNumber">7</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span>
  300. <span class="Identifier">assert</span> <span class="Identifier">any</span><span class="Punctuation">(</span><span class="Identifier">numbers</span><span class="Punctuation">,</span> <span class="Keyword">proc</span> <span class="Punctuation">(</span><span class="Identifier">x</span><span class="Punctuation">:</span> <span class="Identifier">int</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">bool</span> <span class="Operator">=</span> <span class="Identifier">x</span> <span class="Operator">&gt;</span> <span class="DecNumber">8</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="Identifier">true</span>
  301. <span class="Identifier">assert</span> <span class="Identifier">any</span><span class="Punctuation">(</span><span class="Identifier">numbers</span><span class="Punctuation">,</span> <span class="Keyword">proc</span> <span class="Punctuation">(</span><span class="Identifier">x</span><span class="Punctuation">:</span> <span class="Identifier">int</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">bool</span> <span class="Operator">=</span> <span class="Identifier">x</span> <span class="Operator">&gt;</span> <span class="DecNumber">9</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="Identifier">false</span></pre>
  302. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L764" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  303. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L764" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  304. </dd>
  305. </div>
  306. </div>
  307. <div id="apply-procs-all">
  308. <div id="apply,openArray[T],proc(T)_3">
  309. <dt><pre><span class="Keyword">proc</span> <a href="#apply%2CopenArray%5BT%5D%2Cproc%28T%29_3"><span class="Identifier">apply</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">op</span><span class="Other">:</span> <span class="Keyword">proc</span> <span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span> {.<span class="Identifier">closure</span>.}<span class="Other">)</span> {.<span class="Identifier">inline</span><span class="Other">,</span>
  310. <span class="Identifier">effectsOf</span><span class="Other">:</span> <span class="Identifier">op</span>.}</pre></dt>
  311. <dd>
  312. Same as <tt class="docutils literal"><span class="pre"><span class="Identifier">apply</span></span></tt> but for a proc that does not return anything and does not mutate <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> directly.
  313. <p><strong class="examples_text">Example:</strong></p>
  314. <pre class="listing"><span class="Keyword">var</span> <span class="Identifier">message</span><span class="Punctuation">:</span> <span class="Identifier">string</span>
  315. <span class="Identifier">apply</span><span class="Punctuation">(</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span><span class="Punctuation">,</span> <span class="Keyword">proc</span><span class="Punctuation">(</span><span class="Identifier">item</span><span class="Punctuation">:</span> <span class="Identifier">int</span><span class="Punctuation">)</span> <span class="Operator">=</span> <span class="Identifier">message</span><span class="Operator">.</span><span class="Identifier">addInt</span> <span class="Identifier">item</span><span class="Punctuation">)</span>
  316. <span class="Identifier">assert</span> <span class="Identifier">message</span> <span class="Operator">==</span> <span class="StringLit">&quot;01234&quot;</span></pre>
  317. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L457" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  318. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L457" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  319. </dd>
  320. </div>
  321. <div id="apply,openArray[T],proc(T)_2">
  322. <dt><pre><span class="Keyword">proc</span> <a href="#apply%2CopenArray%5BT%5D%2Cproc%28T%29_2"><span class="Identifier">apply</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">op</span><span class="Other">:</span> <span class="Keyword">proc</span> <span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.<span class="Identifier">closure</span>.}<span class="Other">)</span> {.<span class="Identifier">inline</span><span class="Other">,</span>
  323. <span class="Identifier">effectsOf</span><span class="Other">:</span> <span class="Identifier">op</span>.}</pre></dt>
  324. <dd>
  325. <p>Applies <tt class="docutils literal"><span class="pre"><span class="Identifier">op</span></span></tt> to every item in <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> modifying it directly.</p>
  326. <p>Note that the container <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> must be declared as a <tt class="docutils literal"><span class="pre"><span class="Keyword">var</span></span></tt> and it is required for your input and output types to be the same, since <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> is modified in-place. The parameter function takes and returns a <tt class="docutils literal"><span class="pre"><span class="Identifier">T</span></span></tt> type variable.</p>
  327. <p><strong>See also:</strong></p>
  328. <ul class="simple"><li><a class="reference external" href="#applyIt.t,untyped,untyped">applyIt template</a></li>
  329. <li><a class="reference external" href="#map,openArray[T],proc(T)">map proc</a></li>
  330. </ul>
  331. <p><strong class="examples_text">Example:</strong></p>
  332. <pre class="listing"><span class="Keyword">var</span> <span class="Identifier">a</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;1&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;2&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;3&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;4&quot;</span><span class="Punctuation">]</span>
  333. <span class="Identifier">apply</span><span class="Punctuation">(</span><span class="Identifier">a</span><span class="Punctuation">,</span> <span class="Keyword">proc</span><span class="Punctuation">(</span><span class="Identifier">x</span><span class="Punctuation">:</span> <span class="Identifier">string</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">string</span> <span class="Operator">=</span> <span class="Identifier">x</span> <span class="Operator">&amp;</span> <span class="StringLit">&quot;42&quot;</span><span class="Punctuation">)</span>
  334. <span class="Identifier">assert</span> <span class="Identifier">a</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;142&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;242&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;342&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;442&quot;</span><span class="Punctuation">]</span></pre>
  335. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L437" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  336. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L437" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  337. </dd>
  338. </div>
  339. <div id="apply,openArray[T],proc(T)">
  340. <dt><pre><span class="Keyword">proc</span> <a href="#apply%2CopenArray%5BT%5D%2Cproc%28T%29"><span class="Identifier">apply</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">op</span><span class="Other">:</span> <span class="Keyword">proc</span> <span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Keyword">var</span> <span class="Identifier">T</span><span class="Other">)</span> {.<span class="Identifier">closure</span>.}<span class="Other">)</span> {.<span class="Identifier">inline</span><span class="Other">,</span>
  341. <span class="Identifier">effectsOf</span><span class="Other">:</span> <span class="Identifier">op</span>.}</pre></dt>
  342. <dd>
  343. <p>Applies <tt class="docutils literal"><span class="pre"><span class="Identifier">op</span></span></tt> to every item in <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt>, modifying it directly.</p>
  344. <p>Note that the container <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> must be declared as a <tt class="docutils literal"><span class="pre"><span class="Keyword">var</span></span></tt>, since <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> is modified in-place. The parameter function takes a <tt class="docutils literal"><span class="pre"><span class="Keyword">var</span> <span class="Identifier">T</span></span></tt> type parameter.</p>
  345. <p><strong>See also:</strong></p>
  346. <ul class="simple"><li><a class="reference external" href="#applyIt.t,untyped,untyped">applyIt template</a></li>
  347. <li><a class="reference external" href="#map,openArray[T],proc(T)">map proc</a></li>
  348. </ul>
  349. <p><strong class="examples_text">Example:</strong></p>
  350. <pre class="listing"><span class="Keyword">var</span> <span class="Identifier">a</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;1&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;2&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;3&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;4&quot;</span><span class="Punctuation">]</span>
  351. <span class="Identifier">apply</span><span class="Punctuation">(</span><span class="Identifier">a</span><span class="Punctuation">,</span> <span class="Keyword">proc</span><span class="Punctuation">(</span><span class="Identifier">x</span><span class="Punctuation">:</span> <span class="Keyword">var</span> <span class="Identifier">string</span><span class="Punctuation">)</span> <span class="Operator">=</span> <span class="Identifier">x</span> <span class="Operator">&amp;=</span> <span class="StringLit">&quot;42&quot;</span><span class="Punctuation">)</span>
  352. <span class="Identifier">assert</span> <span class="Identifier">a</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;142&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;242&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;342&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;442&quot;</span><span class="Punctuation">]</span></pre>
  353. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L418" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  354. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L418" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  355. </dd>
  356. </div>
  357. </div>
  358. <div id="concat-procs-all">
  359. <div id="concat,varargs[seq[T]]">
  360. <dt><pre><span class="Keyword">func</span> <a href="#concat%2Cvarargs%5Bseq%5BT%5D%5D"><span class="Identifier">concat</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">seqs</span><span class="Other">:</span> <a href="system.html#varargs"><span class="Identifier">varargs</span></a><span class="Other">[</span><a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span></pre></dt>
  361. <dd>
  362. <p>Takes several sequences' items and returns them inside a new sequence. All sequences must be of the same type.</p>
  363. <p><strong>See also:</strong></p>
  364. <ul class="simple"><li><a class="reference external" href="#distribute,seq[T],Positive">distribute func</a> for a reverse operation</li>
  365. </ul>
  366. <p><strong class="examples_text">Example:</strong></p>
  367. <pre class="listing"><span class="Keyword">let</span>
  368. <span class="Identifier">s1</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">]</span>
  369. <span class="Identifier">s2</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">]</span>
  370. <span class="Identifier">s3</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">6</span><span class="Punctuation">,</span> <span class="DecNumber">7</span><span class="Punctuation">]</span>
  371. <span class="Identifier">total</span> <span class="Operator">=</span> <span class="Identifier">concat</span><span class="Punctuation">(</span><span class="Identifier">s1</span><span class="Punctuation">,</span> <span class="Identifier">s2</span><span class="Punctuation">,</span> <span class="Identifier">s3</span><span class="Punctuation">)</span>
  372. <span class="Identifier">assert</span> <span class="Identifier">total</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">6</span><span class="Punctuation">,</span> <span class="DecNumber">7</span><span class="Punctuation">]</span></pre>
  373. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L119" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  374. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L119" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  375. </dd>
  376. </div>
  377. </div>
  378. <div id="count-procs-all">
  379. <div id="count,openArray[T],T">
  380. <dt><pre><span class="Keyword">func</span> <a href="#count%2CopenArray%5BT%5D%2CT"><span class="Identifier">count</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a></pre></dt>
  381. <dd>
  382. Returns the number of occurrences of the item <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt> in the container <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt>.
  383. <p><strong class="examples_text">Example:</strong></p>
  384. <pre class="listing"><span class="Keyword">let</span>
  385. <span class="Identifier">a</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">]</span>
  386. <span class="Identifier">b</span> <span class="Operator">=</span> <span class="StringLit">&quot;abracadabra&quot;</span>
  387. <span class="Identifier">assert</span> <span class="Identifier">count</span><span class="Punctuation">(</span><span class="Identifier">a</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">4</span>
  388. <span class="Identifier">assert</span> <span class="Identifier">count</span><span class="Punctuation">(</span><span class="Identifier">a</span><span class="Punctuation">,</span> <span class="DecNumber">99</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">0</span>
  389. <span class="Identifier">assert</span> <span class="Identifier">count</span><span class="Punctuation">(</span><span class="Identifier">b</span><span class="Punctuation">,</span> <span class="CharLit">'r'</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">2</span></pre>
  390. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L160" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  391. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L160" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  392. </dd>
  393. </div>
  394. </div>
  395. <div id="cycle-procs-all">
  396. <div id="cycle,openArray[T],Natural">
  397. <dt><pre><span class="Keyword">func</span> <a href="#cycle%2CopenArray%5BT%5D%2CNatural"><span class="Identifier">cycle</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">n</span><span class="Other">:</span> <a href="system.html#Natural"><span class="Identifier">Natural</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span></pre></dt>
  398. <dd>
  399. Returns a new sequence with the items of the container <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> repeated <tt class="docutils literal"><span class="pre"><span class="Identifier">n</span></span></tt> times. <tt class="docutils literal"><span class="pre"><span class="Identifier">n</span></span></tt> must be a non-negative number (zero or more).
  400. <p><strong class="examples_text">Example:</strong></p>
  401. <pre class="listing"><span class="Keyword">let</span>
  402. <span class="Identifier">s</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">]</span>
  403. <span class="Identifier">total</span> <span class="Operator">=</span> <span class="Identifier">s</span><span class="Operator">.</span><span class="Identifier">cycle</span><span class="Punctuation">(</span><span class="DecNumber">3</span><span class="Punctuation">)</span>
  404. <span class="Identifier">assert</span> <span class="Identifier">total</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">]</span></pre>
  405. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L175" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  406. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L175" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  407. </dd>
  408. </div>
  409. </div>
  410. <div id="deduplicate-procs-all">
  411. <div id="deduplicate,openArray[T],bool">
  412. <dt><pre><span class="Keyword">func</span> <a href="#deduplicate%2CopenArray%5BT%5D%2Cbool"><span class="Identifier">deduplicate</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">isSorted</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> <span class="Other">=</span> <span class="Identifier">false</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span></pre></dt>
  413. <dd>
  414. <p>Returns a new sequence without duplicates.</p>
  415. <p>Setting the optional argument <tt class="docutils literal"><span class="pre"><span class="Identifier">isSorted</span></span></tt> to true (default: false) uses a faster algorithm for deduplication. </p>
  416. <p><strong class="examples_text">Example:</strong></p>
  417. <pre class="listing"><span class="Keyword">let</span>
  418. <span class="Identifier">dup1</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span>
  419. <span class="Identifier">dup2</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;a&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;a&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;c&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;d&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;d&quot;</span><span class="Punctuation">]</span>
  420. <span class="Identifier">unique1</span> <span class="Operator">=</span> <span class="Identifier">deduplicate</span><span class="Punctuation">(</span><span class="Identifier">dup1</span><span class="Punctuation">)</span>
  421. <span class="Identifier">unique2</span> <span class="Operator">=</span> <span class="Identifier">deduplicate</span><span class="Punctuation">(</span><span class="Identifier">dup2</span><span class="Punctuation">,</span> <span class="Identifier">isSorted</span> <span class="Operator">=</span> <span class="Identifier">true</span><span class="Punctuation">)</span>
  422. <span class="Identifier">assert</span> <span class="Identifier">unique1</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">]</span>
  423. <span class="Identifier">assert</span> <span class="Identifier">unique2</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;a&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;c&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;d&quot;</span><span class="Punctuation">]</span></pre>
  424. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L206" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  425. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L206" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  426. </dd>
  427. </div>
  428. </div>
  429. <div id="delete-procs-all">
  430. <div id="delete,seq[T],Natural,Natural">
  431. <dt><pre><span class="Keyword">func</span> <a href="#delete%2Cseq%5BT%5D%2CNatural%2CNatural"><span class="Identifier">delete</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">first</span><span class="Other">,</span> <span class="Identifier">last</span><span class="Other">:</span> <a href="system.html#Natural"><span class="Identifier">Natural</span></a><span class="Other">)</span> {.
  432. <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">deprecated</span><span class="Other">:</span> <span class="StringLit">&quot;use `delete(s, first..last)`&quot;</span></span>.}</pre></dt>
  433. <dd>
  434. <div class="deprecation-message">
  435. <b>Deprecated:</b> use `delete(s, first..last)`
  436. </div>
  437. Deletes the items of a sequence <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> at positions <tt class="docutils literal"><span class="pre"><span class="Identifier">first</span><span class="Operator">..</span><span class="Identifier">last</span></span></tt> (including both ends of the range). This modifies <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> itself, it does not return a copy.
  438. <p><strong class="examples_text">Example: cmd: --warning:deprecated:off</strong></p>
  439. <pre class="listing"><span class="Keyword">let</span> <span class="Identifier">outcome</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">]</span>
  440. <span class="Keyword">var</span> <span class="Identifier">dest</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">]</span>
  441. <span class="Identifier">dest</span><span class="Operator">.</span><span class="Identifier">delete</span><span class="Punctuation">(</span><span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">)</span>
  442. <span class="Identifier">assert</span> <span class="Identifier">outcome</span> <span class="Operator">==</span> <span class="Identifier">dest</span></pre>
  443. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L586" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  444. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L586" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  445. </dd>
  446. </div>
  447. <div id="delete,seq[T],Slice[int]">
  448. <dt><pre><span class="Keyword">func</span> <a href="#delete%2Cseq%5BT%5D%2CSlice%5Bint%5D"><span class="Identifier">delete</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">slice</span><span class="Other">:</span> <a href="system.html#Slice"><span class="Identifier">Slice</span></a><span class="Other">[</span><a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">]</span><span class="Other">)</span></pre></dt>
  449. <dd>
  450. <p>Deletes the items <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span><span class="Punctuation">[</span><span class="Identifier">slice</span><span class="Punctuation">]</span></span></tt>, raising <tt class="docutils literal"><span class="pre"><span class="Identifier">IndexDefect</span></span></tt> if the slice contains elements out of range.</p>
  451. <p>This operation moves all elements after <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span><span class="Punctuation">[</span><span class="Identifier">slice</span><span class="Punctuation">]</span></span></tt> in linear time.</p>
  452. <p><strong class="examples_text">Example:</strong></p>
  453. <pre class="listing"><span class="Keyword">var</span> <span class="Identifier">a</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">10</span><span class="Punctuation">,</span> <span class="DecNumber">11</span><span class="Punctuation">,</span> <span class="DecNumber">12</span><span class="Punctuation">,</span> <span class="DecNumber">13</span><span class="Punctuation">,</span> <span class="DecNumber">14</span><span class="Punctuation">]</span>
  454. <span class="Identifier">doAssertRaises</span><span class="Punctuation">(</span><span class="Identifier">IndexDefect</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">a</span><span class="Operator">.</span><span class="Identifier">delete</span><span class="Punctuation">(</span><span class="FloatNumber">4.</span><span class="Operator">.</span><span class="DecNumber">5</span><span class="Punctuation">)</span>
  455. <span class="Identifier">assert</span> <span class="Identifier">a</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">10</span><span class="Punctuation">,</span> <span class="DecNumber">11</span><span class="Punctuation">,</span> <span class="DecNumber">12</span><span class="Punctuation">,</span> <span class="DecNumber">13</span><span class="Punctuation">,</span> <span class="DecNumber">14</span><span class="Punctuation">]</span>
  456. <span class="Identifier">a</span><span class="Operator">.</span><span class="Identifier">delete</span><span class="Punctuation">(</span><span class="FloatNumber">4.</span><span class="Operator">.</span><span class="DecNumber">4</span><span class="Punctuation">)</span>
  457. <span class="Identifier">assert</span> <span class="Identifier">a</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">10</span><span class="Punctuation">,</span> <span class="DecNumber">11</span><span class="Punctuation">,</span> <span class="DecNumber">12</span><span class="Punctuation">,</span> <span class="DecNumber">13</span><span class="Punctuation">]</span>
  458. <span class="Identifier">a</span><span class="Operator">.</span><span class="Identifier">delete</span><span class="Punctuation">(</span><span class="FloatNumber">1.</span><span class="Operator">.</span><span class="DecNumber">2</span><span class="Punctuation">)</span>
  459. <span class="Identifier">assert</span> <span class="Identifier">a</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">10</span><span class="Punctuation">,</span> <span class="DecNumber">13</span><span class="Punctuation">]</span>
  460. <span class="Identifier">a</span><span class="Operator">.</span><span class="Identifier">delete</span><span class="Punctuation">(</span><span class="FloatNumber">1.</span><span class="Operator">.&lt;</span><span class="DecNumber">1</span><span class="Punctuation">)</span> <span class="Comment"># empty slice</span>
  461. <span class="Identifier">assert</span> <span class="Identifier">a</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">10</span><span class="Punctuation">,</span> <span class="DecNumber">13</span><span class="Punctuation">]</span></pre>
  462. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L546" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  463. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L546" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  464. </dd>
  465. </div>
  466. </div>
  467. <div id="distribute-procs-all">
  468. <div id="distribute,seq[T],Positive">
  469. <dt><pre><span class="Keyword">func</span> <a href="#distribute%2Cseq%5BT%5D%2CPositive"><span class="Identifier">distribute</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">num</span><span class="Other">:</span> <a href="system.html#Positive"><span class="Identifier">Positive</span></a><span class="Other">;</span> <span class="Identifier">spread</span> <span class="Other">=</span> <span class="Identifier">true</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">]</span></pre></dt>
  470. <dd>
  471. <p>Splits and distributes a sequence <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> into <tt class="docutils literal"><span class="pre"><span class="Identifier">num</span></span></tt> sub-sequences.</p>
  472. <p>Returns a sequence of <tt class="docutils literal"><span class="pre"><span class="Identifier">num</span></span></tt> sequences. For <em>some</em> input values this is the inverse of the <a class="reference external" href="#concat,varargs[seq[T]]">concat</a> func. The input sequence <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> can be empty, which will produce <tt class="docutils literal"><span class="pre"><span class="Identifier">num</span></span></tt> empty sequences.</p>
  473. <p>If <tt class="docutils literal"><span class="pre"><span class="Identifier">spread</span></span></tt> is false and the length of <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> is not a multiple of <tt class="docutils literal"><span class="pre"><span class="Identifier">num</span></span></tt>, the func will max out the first sub-sequence with <tt class="docutils literal"><span class="pre"><span class="DecNumber">1</span> <span class="Operator">+</span> <span class="Identifier">len</span><span class="Punctuation">(</span><span class="Identifier">s</span><span class="Punctuation">)</span> <span class="Keyword">div</span> <span class="Identifier">num</span></span></tt> entries, leaving the remainder of elements to the last sequence.</p>
  474. <p>On the other hand, if <tt class="docutils literal"><span class="pre"><span class="Identifier">spread</span></span></tt> is true, the func will distribute evenly the remainder of the division across all sequences, which makes the result more suited to multithreading where you are passing equal sized work units to a thread pool and want to maximize core usage. </p>
  475. <p><strong class="examples_text">Example:</strong></p>
  476. <pre class="listing"><span class="Keyword">let</span> <span class="Identifier">numbers</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">6</span><span class="Punctuation">,</span> <span class="DecNumber">7</span><span class="Punctuation">]</span>
  477. <span class="Identifier">assert</span> <span class="Identifier">numbers</span><span class="Operator">.</span><span class="Identifier">distribute</span><span class="Punctuation">(</span><span class="DecNumber">3</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">]</span><span class="Punctuation">,</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">]</span><span class="Punctuation">,</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">6</span><span class="Punctuation">,</span> <span class="DecNumber">7</span><span class="Punctuation">]</span><span class="Punctuation">]</span>
  478. <span class="Identifier">assert</span> <span class="Identifier">numbers</span><span class="Operator">.</span><span class="Identifier">distribute</span><span class="Punctuation">(</span><span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="Identifier">false</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">]</span><span class="Punctuation">,</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">6</span><span class="Punctuation">]</span><span class="Punctuation">,</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">7</span><span class="Punctuation">]</span><span class="Punctuation">]</span>
  479. <span class="Identifier">assert</span> <span class="Identifier">numbers</span><span class="Operator">.</span><span class="Identifier">distribute</span><span class="Punctuation">(</span><span class="DecNumber">6</span><span class="Punctuation">)</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">]</span>
  480. <span class="Identifier">assert</span> <span class="Identifier">numbers</span><span class="Operator">.</span><span class="Identifier">distribute</span><span class="Punctuation">(</span><span class="DecNumber">6</span><span class="Punctuation">)</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">]</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">3</span><span class="Punctuation">]</span></pre>
  481. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L336" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  482. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L336" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  483. </dd>
  484. </div>
  485. </div>
  486. <div id="filter-procs-all">
  487. <div id="filter,openArray[T],proc(T)">
  488. <dt><pre><span class="Keyword">proc</span> <a href="#filter%2CopenArray%5BT%5D%2Cproc%28T%29"><span class="Identifier">filter</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">pred</span><span class="Other">:</span> <span class="Keyword">proc</span> <span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.<span class="Identifier">closure</span>.}<span class="Other">)</span><span class="Other">:</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span> {.
  489. <span class="Identifier">inline</span><span class="Other">,</span> <span class="Identifier">effectsOf</span><span class="Other">:</span> <span class="Identifier">pred</span>.}</pre></dt>
  490. <dd>
  491. <p>Returns a new sequence with all the items of <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> that fulfill the predicate <tt class="docutils literal"><span class="pre"><span class="Identifier">pred</span></span></tt> (a function that returns a <tt class="docutils literal"><span class="pre"><span class="Identifier">bool</span></span></tt>).</p>
  492. <p>Instead of using <tt class="docutils literal"><span class="pre"><span class="Identifier">map</span></span></tt> and <tt class="docutils literal"><span class="pre"><span class="Identifier">filter</span></span></tt>, consider using the <tt class="docutils literal"><span class="pre"><span class="Identifier">collect</span></span></tt> macro from the <tt class="docutils literal"><span class="pre"><span class="Identifier">sugar</span></span></tt> module.</p>
  493. <p><strong>See also:</strong></p>
  494. <ul class="simple"><li><a class="reference external" href="sugar.html#collect.m%2Cuntyped%2Cuntyped">sugar.collect macro</a></li>
  495. <li><a class="reference external" href="#filterIt.t,untyped,untyped">filterIt template</a></li>
  496. <li><a class="reference external" href="#filter.i,openArray[T],proc(T)">filter iterator</a></li>
  497. <li><a class="reference external" href="#keepIf,seq[T],proc(T)">keepIf proc</a> for the in-place version</li>
  498. </ul>
  499. <p><strong class="examples_text">Example:</strong></p>
  500. <pre class="listing"><span class="Keyword">let</span>
  501. <span class="Identifier">colors</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;red&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;yellow&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;black&quot;</span><span class="Punctuation">]</span>
  502. <span class="Identifier">f1</span> <span class="Operator">=</span> <span class="Identifier">filter</span><span class="Punctuation">(</span><span class="Identifier">colors</span><span class="Punctuation">,</span> <span class="Keyword">proc</span><span class="Punctuation">(</span><span class="Identifier">x</span><span class="Punctuation">:</span> <span class="Identifier">string</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">bool</span> <span class="Operator">=</span> <span class="Identifier">x</span><span class="Operator">.</span><span class="Identifier">len</span> <span class="Operator">&lt;</span> <span class="DecNumber">6</span><span class="Punctuation">)</span>
  503. <span class="Identifier">f2</span> <span class="Operator">=</span> <span class="Identifier">filter</span><span class="Punctuation">(</span><span class="Identifier">colors</span><span class="Punctuation">,</span> <span class="Keyword">proc</span><span class="Punctuation">(</span><span class="Identifier">x</span><span class="Punctuation">:</span> <span class="Identifier">string</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">bool</span> <span class="Operator">=</span> <span class="Identifier">x</span><span class="Operator">.</span><span class="Identifier">contains</span><span class="Punctuation">(</span><span class="Punctuation">'</span><span class="Identifier">y</span><span class="CharLit">'))</span>
  504. <span class="Identifier">assert</span> <span class="Identifier">f1</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;red&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;black&quot;</span><span class="Punctuation">]</span>
  505. <span class="Identifier">assert</span> <span class="Identifier">f2</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;yellow&quot;</span><span class="Punctuation">]</span></pre>
  506. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L489" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  507. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L489" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  508. </dd>
  509. </div>
  510. </div>
  511. <div id="insert-procs-all">
  512. <div id="insert,seq[T],openArray[T],int">
  513. <dt><pre><span class="Keyword">func</span> <a href="#insert%2Cseq%5BT%5D%2CopenArray%5BT%5D%2Cint"><span class="Identifier">insert</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">dest</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">src</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">pos</span> <span class="Other">=</span> <span class="DecNumber">0</span><span class="Other">)</span></pre></dt>
  514. <dd>
  515. <p>Inserts items from <tt class="docutils literal"><span class="pre"><span class="Identifier">src</span></span></tt> into <tt class="docutils literal"><span class="pre"><span class="Identifier">dest</span></span></tt> at position <tt class="docutils literal"><span class="pre"><span class="Identifier">pos</span></span></tt>. This modifies <tt class="docutils literal"><span class="pre"><span class="Identifier">dest</span></span></tt> itself, it does not return a copy.</p>
  516. <p>Note that the elements of <tt class="docutils literal"><span class="pre"><span class="Identifier">src</span></span></tt> and <tt class="docutils literal"><span class="pre"><span class="Identifier">dest</span></span></tt> must be of the same type. </p>
  517. <p><strong class="examples_text">Example:</strong></p>
  518. <pre class="listing"><span class="Keyword">var</span> <span class="Identifier">dest</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">]</span>
  519. <span class="Keyword">let</span>
  520. <span class="Identifier">src</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">]</span>
  521. <span class="Identifier">outcome</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">]</span>
  522. <span class="Identifier">dest</span><span class="Operator">.</span><span class="Identifier">insert</span><span class="Punctuation">(</span><span class="Identifier">src</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">)</span>
  523. <span class="Identifier">assert</span> <span class="Identifier">dest</span> <span class="Operator">==</span> <span class="Identifier">outcome</span></pre>
  524. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L610" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  525. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L610" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  526. </dd>
  527. </div>
  528. </div>
  529. <div id="keepIf-procs-all">
  530. <div id="keepIf,seq[T],proc(T)">
  531. <dt><pre><span class="Keyword">proc</span> <a href="#keepIf%2Cseq%5BT%5D%2Cproc%28T%29"><span class="Identifier">keepIf</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">pred</span><span class="Other">:</span> <span class="Keyword">proc</span> <span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.<span class="Identifier">closure</span>.}<span class="Other">)</span> {.<span class="Identifier">inline</span><span class="Other">,</span>
  532. <span class="Identifier">effectsOf</span><span class="Other">:</span> <span class="Identifier">pred</span>.}</pre></dt>
  533. <dd>
  534. <p>Keeps the items in the passed sequence <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> if they fulfill the predicate <tt class="docutils literal"><span class="pre"><span class="Identifier">pred</span></span></tt> (a function that returns a <tt class="docutils literal"><span class="pre"><span class="Identifier">bool</span></span></tt>).</p>
  535. <p>Note that <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> must be declared as a <tt class="docutils literal"><span class="pre"><span class="Keyword">var</span></span></tt>.</p>
  536. <p>Similar to the <a class="reference external" href="#filter,openArray[T],proc(T)">filter proc</a>, but modifies the sequence directly.</p>
  537. <p><strong>See also:</strong></p>
  538. <ul class="simple"><li><a class="reference external" href="#keepItIf.t,seq,untyped">keepItIf template</a></li>
  539. <li><a class="reference external" href="#filter,openArray[T],proc(T)">filter proc</a></li>
  540. </ul>
  541. <p><strong class="examples_text">Example:</strong></p>
  542. <pre class="listing"><span class="Keyword">var</span> <span class="Identifier">floats</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="FloatNumber">13.0</span><span class="Punctuation">,</span> <span class="FloatNumber">12.5</span><span class="Punctuation">,</span> <span class="FloatNumber">5.8</span><span class="Punctuation">,</span> <span class="FloatNumber">2.0</span><span class="Punctuation">,</span> <span class="FloatNumber">6.1</span><span class="Punctuation">,</span> <span class="FloatNumber">9.9</span><span class="Punctuation">,</span> <span class="FloatNumber">10.1</span><span class="Punctuation">]</span>
  543. <span class="Identifier">keepIf</span><span class="Punctuation">(</span><span class="Identifier">floats</span><span class="Punctuation">,</span> <span class="Keyword">proc</span><span class="Punctuation">(</span><span class="Identifier">x</span><span class="Punctuation">:</span> <span class="Identifier">float</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">bool</span> <span class="Operator">=</span> <span class="Identifier">x</span> <span class="Operator">&gt;</span> <span class="DecNumber">10</span><span class="Punctuation">)</span>
  544. <span class="Identifier">assert</span> <span class="Identifier">floats</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="FloatNumber">13.0</span><span class="Punctuation">,</span> <span class="FloatNumber">12.5</span><span class="Punctuation">,</span> <span class="FloatNumber">10.1</span><span class="Punctuation">]</span></pre>
  545. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L516" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  546. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L516" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  547. </dd>
  548. </div>
  549. </div>
  550. <div id="map-procs-all">
  551. <div id="map,openArray[T],proc(T)">
  552. <dt><pre><span class="Keyword">proc</span> <a href="#map%2CopenArray%5BT%5D%2Cproc%28T%29"><span class="Identifier">map</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">,</span> <span class="Identifier">S</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">op</span><span class="Other">:</span> <span class="Keyword">proc</span> <span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">S</span> {.<span class="Identifier">closure</span>.}<span class="Other">)</span><span class="Other">:</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">S</span><span class="Other">]</span> {.
  553. <span class="Identifier">inline</span><span class="Other">,</span> <span class="Identifier">effectsOf</span><span class="Other">:</span> <span class="Identifier">op</span>.}</pre></dt>
  554. <dd>
  555. <p>Returns a new sequence with the results of the <tt class="docutils literal"><span class="pre"><span class="Identifier">op</span></span></tt> proc applied to every item in the container <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt>.</p>
  556. <p>Since the input is not modified, you can use it to transform the type of the elements in the input container.</p>
  557. <p>Instead of using <tt class="docutils literal"><span class="pre"><span class="Identifier">map</span></span></tt> and <tt class="docutils literal"><span class="pre"><span class="Identifier">filter</span></span></tt>, consider using the <tt class="docutils literal"><span class="pre"><span class="Identifier">collect</span></span></tt> macro from the <tt class="docutils literal"><span class="pre"><span class="Identifier">sugar</span></span></tt> module.</p>
  558. <p><strong>See also:</strong></p>
  559. <ul class="simple"><li><a class="reference external" href="sugar.html#collect.m%2Cuntyped%2Cuntyped">sugar.collect macro</a></li>
  560. <li><a class="reference external" href="#mapIt.t,typed,untyped">mapIt template</a></li>
  561. <li><a class="reference external" href="#apply,openArray[T],proc(T)_2">apply proc</a> for the in-place version</li>
  562. </ul>
  563. <p><strong class="examples_text">Example:</strong></p>
  564. <pre class="listing"><span class="Keyword">let</span>
  565. <span class="Identifier">a</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span>
  566. <span class="Identifier">b</span> <span class="Operator">=</span> <span class="Identifier">map</span><span class="Punctuation">(</span><span class="Identifier">a</span><span class="Punctuation">,</span> <span class="Keyword">proc</span><span class="Punctuation">(</span><span class="Identifier">x</span><span class="Punctuation">:</span> <span class="Identifier">int</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">string</span> <span class="Operator">=</span> <span class="Operator">$</span><span class="Identifier">x</span><span class="Punctuation">)</span>
  567. <span class="Identifier">assert</span> <span class="Identifier">b</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;1&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;2&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;3&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;4&quot;</span><span class="Punctuation">]</span></pre>
  568. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L392" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  569. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L392" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  570. </dd>
  571. </div>
  572. </div>
  573. <div id="maxIndex-procs-all">
  574. <div id="maxIndex,openArray[T]">
  575. <dt><pre><span class="Keyword">func</span> <a href="#maxIndex%2CopenArray%5BT%5D"><span class="Identifier">maxIndex</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a></pre></dt>
  576. <dd>
  577. Returns the index of the maximum value of <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt>. <tt class="docutils literal"><span class="pre"><span class="Identifier">T</span></span></tt> needs to have a <tt class="docutils literal"><span class="pre"><span class="Operator">&lt;</span></span></tt> operator.
  578. <p><strong class="examples_text">Example:</strong></p>
  579. <pre class="listing"><span class="Keyword">let</span>
  580. <span class="Identifier">a</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span>
  581. <span class="Identifier">b</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">6</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">]</span>
  582. <span class="Identifier">c</span> <span class="Operator">=</span> <span class="Punctuation">[</span><span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="Operator">-</span><span class="DecNumber">7</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">,</span> <span class="Operator">-</span><span class="DecNumber">5</span><span class="Punctuation">]</span>
  583. <span class="Identifier">d</span> <span class="Operator">=</span> <span class="StringLit">&quot;ziggy&quot;</span>
  584. <span class="Identifier">assert</span> <span class="Identifier">maxIndex</span><span class="Punctuation">(</span><span class="Identifier">a</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">3</span>
  585. <span class="Identifier">assert</span> <span class="Identifier">maxIndex</span><span class="Punctuation">(</span><span class="Identifier">b</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">0</span>
  586. <span class="Identifier">assert</span> <span class="Identifier">maxIndex</span><span class="Punctuation">(</span><span class="Identifier">c</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">2</span>
  587. <span class="Identifier">assert</span> <span class="Identifier">maxIndex</span><span class="Punctuation">(</span><span class="Identifier">d</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">0</span></pre>
  588. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L251" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  589. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L251" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  590. </dd>
  591. </div>
  592. </div>
  593. <div id="minIndex-procs-all">
  594. <div id="minIndex,openArray[T]">
  595. <dt><pre><span class="Keyword">func</span> <a href="#minIndex%2CopenArray%5BT%5D"><span class="Identifier">minIndex</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a></pre></dt>
  596. <dd>
  597. Returns the index of the minimum value of <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt>. <tt class="docutils literal"><span class="pre"><span class="Identifier">T</span></span></tt> needs to have a <tt class="docutils literal"><span class="pre"><span class="Operator">&lt;</span></span></tt> operator.
  598. <p><strong class="examples_text">Example:</strong></p>
  599. <pre class="listing"><span class="Keyword">let</span>
  600. <span class="Identifier">a</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span>
  601. <span class="Identifier">b</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">6</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">]</span>
  602. <span class="Identifier">c</span> <span class="Operator">=</span> <span class="Punctuation">[</span><span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="Operator">-</span><span class="DecNumber">7</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">,</span> <span class="Operator">-</span><span class="DecNumber">5</span><span class="Punctuation">]</span>
  603. <span class="Identifier">d</span> <span class="Operator">=</span> <span class="StringLit">&quot;ziggy&quot;</span>
  604. <span class="Identifier">assert</span> <span class="Identifier">minIndex</span><span class="Punctuation">(</span><span class="Identifier">a</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">0</span>
  605. <span class="Identifier">assert</span> <span class="Identifier">minIndex</span><span class="Punctuation">(</span><span class="Identifier">b</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">3</span>
  606. <span class="Identifier">assert</span> <span class="Identifier">minIndex</span><span class="Punctuation">(</span><span class="Identifier">c</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">1</span>
  607. <span class="Identifier">assert</span> <span class="Identifier">minIndex</span><span class="Punctuation">(</span><span class="Identifier">d</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">2</span></pre>
  608. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L234" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  609. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L234" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  610. </dd>
  611. </div>
  612. </div>
  613. <div id="minmax-procs-all">
  614. <div id="minmax,openArray[T]">
  615. <dt><pre><span class="Keyword">func</span> <a href="#minmax%2CopenArray%5BT%5D"><span class="Identifier">minmax</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Other">(</span><span class="Identifier">T</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">)</span></pre></dt>
  616. <dd>
  617. The minimum and maximum values of <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt>. <tt class="docutils literal"><span class="pre"><span class="Identifier">T</span></span></tt> needs to have a <tt class="docutils literal"><span class="pre"><span class="Operator">&lt;</span></span></tt> operator.
  618. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L268" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  619. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L268" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  620. </dd>
  621. </div>
  622. </div>
  623. <div id="repeat-procs-all">
  624. <div id="repeat,T,Natural">
  625. <dt><pre><span class="Keyword">proc</span> <a href="#repeat%2CT%2CNatural"><span class="Identifier">repeat</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">;</span> <span class="Identifier">n</span><span class="Other">:</span> <a href="system.html#Natural"><span class="Identifier">Natural</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span></pre></dt>
  626. <dd>
  627. Returns a new sequence with the item <tt class="docutils literal"><span class="pre"><span class="Identifier">x</span></span></tt> repeated <tt class="docutils literal"><span class="pre"><span class="Identifier">n</span></span></tt> times. <tt class="docutils literal"><span class="pre"><span class="Identifier">n</span></span></tt> must be a non-negative number (zero or more).
  628. <p><strong class="examples_text">Example:</strong></p>
  629. <pre class="listing"><span class="Keyword">let</span>
  630. <span class="Identifier">total</span> <span class="Operator">=</span> <span class="Identifier">repeat</span><span class="Punctuation">(</span><span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">)</span>
  631. <span class="Identifier">assert</span> <span class="Identifier">total</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">]</span></pre>
  632. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L193" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  633. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L193" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  634. </dd>
  635. </div>
  636. </div>
  637. <div id="unzip-procs-all">
  638. <div id="unzip,openArray[]">
  639. <dt><pre><span class="Keyword">proc</span> <a href="#unzip%2CopenArray%5B%5D"><span class="Identifier">unzip</span></a><span class="Other">[</span><span class="Identifier">S</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Other">(</span><span class="Identifier">S</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Other">(</span><a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">S</span><span class="Other">]</span><span class="Other">,</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">)</span></pre></dt>
  640. <dd>
  641. Returns a tuple of two sequences split out from a sequence of 2-field tuples.
  642. <p><strong class="examples_text">Example:</strong></p>
  643. <pre class="listing"><span class="Keyword">let</span>
  644. <span class="Identifier">zipped</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Punctuation">(</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="CharLit">'a'</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="CharLit">'b'</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="CharLit">'c'</span><span class="Punctuation">)</span><span class="Punctuation">]</span>
  645. <span class="Identifier">unzipped1</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">]</span>
  646. <span class="Identifier">unzipped2</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Punctuation">'</span><span class="Identifier">a</span><span class="CharLit">', '</span><span class="Identifier">b</span><span class="CharLit">', '</span><span class="Identifier">c</span><span class="CharLit">']</span>
  647. <span class="Identifier">assert</span> <span class="Identifier">zipped</span><span class="Operator">.</span><span class="Identifier">unzip</span><span class="Punctuation">(</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="Punctuation">(</span><span class="Identifier">unzipped1</span><span class="Punctuation">,</span> <span class="Identifier">unzipped2</span><span class="Punctuation">)</span>
  648. <span class="Identifier">assert</span> <span class="Identifier">zip</span><span class="Punctuation">(</span><span class="Identifier">unzipped1</span><span class="Punctuation">,</span> <span class="Identifier">unzipped2</span><span class="Punctuation">)</span><span class="Operator">.</span><span class="Identifier">unzip</span><span class="Punctuation">(</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="Punctuation">(</span><span class="Identifier">unzipped1</span><span class="Punctuation">,</span> <span class="Identifier">unzipped2</span><span class="Punctuation">)</span></pre>
  649. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L322" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  650. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L322" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  651. </dd>
  652. </div>
  653. </div>
  654. <div id="zip-procs-all">
  655. <div id="zip,,">
  656. <dt><pre><span class="Keyword">proc</span> <a href="#zip%2C%2C"><span class="Identifier">zip</span></a><span class="Other">[</span><span class="Identifier">S</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s1</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">S</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">s2</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">[</span><span class="Other">(</span><span class="Identifier">S</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">]</span></pre></dt>
  657. <dd>
  658. <p>Returns a new sequence with a combination of the two input containers.</p>
  659. <p>The input containers can be of different types. If one container is shorter, the remaining items in the longer container are discarded.</p>
  660. <p><strong>Note</strong>: For Nim 1.0.x and older version, <tt class="docutils literal"><span class="pre"><span class="Identifier">zip</span></span></tt> returned a seq of named tuples with fields <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt> and <tt class="docutils literal"><span class="pre"><span class="Identifier">b</span></span></tt>. For Nim versions 1.1.x and newer, <tt class="docutils literal"><span class="pre"><span class="Identifier">zip</span></span></tt> returns a seq of unnamed tuples.</p>
  661. <p><strong class="examples_text">Example:</strong></p>
  662. <pre class="listing"><span class="Keyword">let</span>
  663. <span class="Identifier">short</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">]</span>
  664. <span class="Identifier">long</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">6</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">]</span>
  665. <span class="Identifier">words</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;one&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;two&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;three&quot;</span><span class="Punctuation">]</span>
  666. <span class="Identifier">letters</span> <span class="Operator">=</span> <span class="StringLit">&quot;abcd&quot;</span>
  667. <span class="Identifier">zip1</span> <span class="Operator">=</span> <span class="Identifier">zip</span><span class="Punctuation">(</span><span class="Identifier">short</span><span class="Punctuation">,</span> <span class="Identifier">long</span><span class="Punctuation">)</span>
  668. <span class="Identifier">zip2</span> <span class="Operator">=</span> <span class="Identifier">zip</span><span class="Punctuation">(</span><span class="Identifier">short</span><span class="Punctuation">,</span> <span class="Identifier">words</span><span class="Punctuation">)</span>
  669. <span class="Identifier">assert</span> <span class="Identifier">zip1</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Punctuation">(</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">6</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">)</span><span class="Punctuation">]</span>
  670. <span class="Identifier">assert</span> <span class="Identifier">zip2</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Punctuation">(</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="StringLit">&quot;one&quot;</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="StringLit">&quot;two&quot;</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="StringLit">&quot;three&quot;</span><span class="Punctuation">)</span><span class="Punctuation">]</span>
  671. <span class="Identifier">assert</span> <span class="Identifier">zip1</span><span class="Punctuation">[</span><span class="DecNumber">2</span><span class="Punctuation">]</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span> <span class="Operator">==</span> <span class="DecNumber">3</span>
  672. <span class="Identifier">assert</span> <span class="Identifier">zip2</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">]</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">]</span> <span class="Operator">==</span> <span class="StringLit">&quot;two&quot;</span>
  673. <span class="Keyword">when</span> <span class="Punctuation">(</span><span class="Identifier">NimMajor</span><span class="Punctuation">,</span> <span class="Identifier">NimMinor</span><span class="Punctuation">)</span> <span class="Operator">&lt;=</span> <span class="Punctuation">(</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">0</span><span class="Punctuation">)</span><span class="Punctuation">:</span>
  674. <span class="Keyword">let</span>
  675. <span class="Identifier">zip3</span> <span class="Operator">=</span> <span class="Identifier">zip</span><span class="Punctuation">(</span><span class="Identifier">long</span><span class="Punctuation">,</span> <span class="Identifier">letters</span><span class="Punctuation">)</span>
  676. <span class="Identifier">assert</span> <span class="Identifier">zip3</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Punctuation">(</span><span class="Identifier">a</span><span class="Punctuation">:</span> <span class="DecNumber">6</span><span class="Punctuation">,</span> <span class="Identifier">b</span><span class="Punctuation">:</span> <span class="CharLit">'a'</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="CharLit">'b'</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="CharLit">'c'</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="CharLit">'d'</span><span class="Punctuation">)</span><span class="Punctuation">]</span>
  677. <span class="Identifier">assert</span> <span class="Identifier">zip3</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span><span class="Operator">.</span><span class="Identifier">b</span> <span class="Operator">==</span> <span class="CharLit">'a'</span>
  678. <span class="Keyword">else</span><span class="Punctuation">:</span>
  679. <span class="Keyword">let</span>
  680. <span class="Identifier">zip3</span><span class="Punctuation">:</span> <span class="Identifier">seq</span><span class="Punctuation">[</span><span class="Keyword">tuple</span><span class="Punctuation">[</span><span class="Identifier">num</span><span class="Punctuation">:</span> <span class="Identifier">int</span><span class="Punctuation">,</span> <span class="Identifier">letter</span><span class="Punctuation">:</span> <span class="Identifier">char</span><span class="Punctuation">]</span><span class="Punctuation">]</span> <span class="Operator">=</span> <span class="Identifier">zip</span><span class="Punctuation">(</span><span class="Identifier">long</span><span class="Punctuation">,</span> <span class="Identifier">letters</span><span class="Punctuation">)</span>
  681. <span class="Identifier">assert</span> <span class="Identifier">zip3</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Punctuation">(</span><span class="DecNumber">6</span><span class="Punctuation">,</span> <span class="CharLit">'a'</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="CharLit">'b'</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="CharLit">'c'</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="CharLit">'d'</span><span class="Punctuation">)</span><span class="Punctuation">]</span>
  682. <span class="Identifier">assert</span> <span class="Identifier">zip3</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span><span class="Operator">.</span><span class="Identifier">letter</span> <span class="Operator">==</span> <span class="CharLit">'a'</span></pre>
  683. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L320" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  684. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L320" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  685. </dd>
  686. </div>
  687. </div>
  688. </dl>
  689. </div>
  690. <div class="section" id="15">
  691. <h1><a class="toc-backref" href="#15">Iterators</a></h1>
  692. <dl class="item">
  693. <div id="filter-iterators-all">
  694. <div id="filter.i,openArray[T],proc(T)">
  695. <dt><pre><span class="Keyword">iterator</span> <a href="#filter.i%2CopenArray%5BT%5D%2Cproc%28T%29"><span class="Identifier">filter</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#openArray"><span class="Identifier">openArray</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">pred</span><span class="Other">:</span> <span class="Keyword">proc</span> <span class="Other">(</span><span class="Identifier">x</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a> {.<span class="Identifier">closure</span>.}<span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span> {.
  696. <span class="Identifier">effectsOf</span><span class="Other">:</span> <span class="Identifier">pred</span>.}</pre></dt>
  697. <dd>
  698. <p>Iterates through a container <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> and yields every item that fulfills the predicate <tt class="docutils literal"><span class="pre"><span class="Identifier">pred</span></span></tt> (a function that returns a <tt class="docutils literal"><span class="pre"><span class="Identifier">bool</span></span></tt>).</p>
  699. <p>Instead of using <tt class="docutils literal"><span class="pre"><span class="Identifier">map</span></span></tt> and <tt class="docutils literal"><span class="pre"><span class="Identifier">filter</span></span></tt>, consider using the <tt class="docutils literal"><span class="pre"><span class="Identifier">collect</span></span></tt> macro from the <tt class="docutils literal"><span class="pre"><span class="Identifier">sugar</span></span></tt> module.</p>
  700. <p><strong>See also:</strong></p>
  701. <ul class="simple"><li><a class="reference external" href="sugar.html#collect.m%2Cuntyped%2Cuntyped">sugar.collect macro</a></li>
  702. <li><a class="reference external" href="#filter,openArray[T],proc(T)">filter proc</a></li>
  703. <li><a class="reference external" href="#filterIt.t,untyped,untyped">filterIt template</a></li>
  704. </ul>
  705. <p><strong class="examples_text">Example:</strong></p>
  706. <pre class="listing"><span class="Keyword">let</span> <span class="Identifier">numbers</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">,</span> <span class="DecNumber">9</span><span class="Punctuation">,</span> <span class="DecNumber">7</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span>
  707. <span class="Keyword">var</span> <span class="Identifier">evens</span> <span class="Operator">=</span> <span class="Identifier">newSeq</span><span class="Punctuation">[</span><span class="Identifier">int</span><span class="Punctuation">]</span><span class="Punctuation">(</span><span class="Punctuation">)</span>
  708. <span class="Keyword">for</span> <span class="Identifier">n</span> <span class="Keyword">in</span> <span class="Identifier">filter</span><span class="Punctuation">(</span><span class="Identifier">numbers</span><span class="Punctuation">,</span> <span class="Keyword">proc</span> <span class="Punctuation">(</span><span class="Identifier">x</span><span class="Punctuation">:</span> <span class="Identifier">int</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">bool</span> <span class="Operator">=</span> <span class="Identifier">x</span> <span class="Keyword">mod</span> <span class="DecNumber">2</span> <span class="Operator">==</span> <span class="DecNumber">0</span><span class="Punctuation">)</span><span class="Punctuation">:</span>
  709. <span class="Identifier">evens</span><span class="Operator">.</span><span class="Identifier">add</span><span class="Punctuation">(</span><span class="Identifier">n</span><span class="Punctuation">)</span>
  710. <span class="Identifier">assert</span> <span class="Identifier">evens</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span></pre>
  711. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L466" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  712. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L466" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  713. </dd>
  714. </div>
  715. </div>
  716. <div id="items-iterators-all">
  717. <div id="items.i">
  718. <dt><pre><span class="Keyword">iterator</span> <a href="#items.i"><span class="Identifier">items</span></a><span class="Other">[</span><span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">xs</span><span class="Other">:</span> <span class="Keyword">iterator</span> <span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span></pre></dt>
  719. <dd>
  720. Iterates over each element yielded by a closure iterator. This may not seem particularly useful on its own, but this allows closure iterators to be used by the mapIt, filterIt, allIt, anyIt, etc. templates.
  721. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L1156" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  722. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L1156" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  723. </dd>
  724. </div>
  725. </div>
  726. </dl>
  727. </div>
  728. <div class="section" id="17">
  729. <h1><a class="toc-backref" href="#17">Macros</a></h1>
  730. <dl class="item">
  731. <div id="mapLiterals-macros-all">
  732. <div id="mapLiterals.m,untyped,untyped">
  733. <dt><pre><span class="Keyword">macro</span> <a href="#mapLiterals.m%2Cuntyped%2Cuntyped"><span class="Identifier">mapLiterals</span></a><span class="Other">(</span><span class="Identifier">constructor</span><span class="Other">,</span> <span class="Identifier">op</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">;</span> <span class="Identifier">nested</span> <span class="Other">=</span> <span class="Identifier">true</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a></pre></dt>
  734. <dd>
  735. Applies <tt class="docutils literal"><span class="pre"><span class="Identifier">op</span></span></tt> to each of the <strong>atomic</strong> literals like <tt class="docutils literal"><span class="pre"><span class="DecNumber">3</span></span></tt> or <tt class="docutils literal"><span class="pre"><span class="StringLit">&quot;abc&quot;</span></span></tt> in the specified <tt class="docutils literal"><span class="pre"><span class="Identifier">constructor</span></span></tt> AST. This can be used to map every array element to some target type:
  736. <p><strong class="examples_text">Example:</strong></p>
  737. <pre class="listing"><span class="Keyword">let</span> <span class="Identifier">x</span> <span class="Operator">=</span> <span class="Identifier">mapLiterals</span><span class="Punctuation">(</span><span class="Punctuation">[</span><span class="FloatNumber">0.1</span><span class="Punctuation">,</span> <span class="FloatNumber">1.2</span><span class="Punctuation">,</span> <span class="FloatNumber">2.3</span><span class="Punctuation">,</span> <span class="FloatNumber">3.4</span><span class="Punctuation">]</span><span class="Punctuation">,</span> <span class="Identifier">int</span><span class="Punctuation">)</span>
  738. <span class="Identifier">doAssert</span> <span class="Identifier">x</span> <span class="Keyword">is</span> <span class="Identifier">array</span><span class="Punctuation">[</span><span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="Identifier">int</span><span class="Punctuation">]</span>
  739. <span class="Identifier">doAssert</span> <span class="Identifier">x</span> <span class="Operator">==</span> <span class="Punctuation">[</span><span class="Identifier">int</span><span class="Punctuation">(</span><span class="FloatNumber">0.1</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Identifier">int</span><span class="Punctuation">(</span><span class="FloatNumber">1.2</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Identifier">int</span><span class="Punctuation">(</span><span class="FloatNumber">2.3</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Identifier">int</span><span class="Punctuation">(</span><span class="FloatNumber">3.4</span><span class="Punctuation">)</span><span class="Punctuation">]</span></pre>If <tt class="docutils literal"><span class="pre"><span class="Identifier">nested</span></span></tt> is true (which is the default), the literals are replaced everywhere in the <tt class="docutils literal"><span class="pre"><span class="Identifier">constructor</span></span></tt> AST, otherwise only the first level is considered:
  740. <p><strong class="examples_text">Example:</strong></p>
  741. <pre class="listing"><span class="Keyword">let</span> <span class="Identifier">a</span> <span class="Operator">=</span> <span class="Identifier">mapLiterals</span><span class="Punctuation">(</span><span class="Punctuation">(</span><span class="FloatNumber">1.2</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="FloatNumber">2.3</span><span class="Punctuation">,</span> <span class="FloatNumber">3.4</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="FloatNumber">4.8</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Identifier">int</span><span class="Punctuation">)</span>
  742. <span class="Keyword">let</span> <span class="Identifier">b</span> <span class="Operator">=</span> <span class="Identifier">mapLiterals</span><span class="Punctuation">(</span><span class="Punctuation">(</span><span class="FloatNumber">1.2</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="FloatNumber">2.3</span><span class="Punctuation">,</span> <span class="FloatNumber">3.4</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="FloatNumber">4.8</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Identifier">int</span><span class="Punctuation">,</span> <span class="Identifier">nested</span><span class="Operator">=</span><span class="Identifier">false</span><span class="Punctuation">)</span>
  743. <span class="Identifier">assert</span> <span class="Identifier">a</span> <span class="Operator">==</span> <span class="Punctuation">(</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">)</span>
  744. <span class="Identifier">assert</span> <span class="Identifier">b</span> <span class="Operator">==</span> <span class="Punctuation">(</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="FloatNumber">2.3</span><span class="Punctuation">,</span> <span class="FloatNumber">3.4</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">)</span>
  745. <span class="Keyword">let</span> <span class="Identifier">c</span> <span class="Operator">=</span> <span class="Identifier">mapLiterals</span><span class="Punctuation">(</span><span class="Punctuation">(</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">6</span><span class="Punctuation">)</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">`</span><span class="Operator">$</span><span class="Punctuation">`</span><span class="Punctuation">)</span>
  746. <span class="Keyword">let</span> <span class="Identifier">d</span> <span class="Operator">=</span> <span class="Identifier">mapLiterals</span><span class="Punctuation">(</span><span class="Punctuation">(</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">6</span><span class="Punctuation">)</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Punctuation">`</span><span class="Operator">$</span><span class="Punctuation">`</span><span class="Punctuation">,</span> <span class="Identifier">nested</span><span class="Operator">=</span><span class="Identifier">false</span><span class="Punctuation">)</span>
  747. <span class="Identifier">assert</span> <span class="Identifier">c</span> <span class="Operator">==</span> <span class="Punctuation">(</span><span class="StringLit">&quot;1&quot;</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="StringLit">&quot;2&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;3&quot;</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="StringLit">&quot;4&quot;</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="StringLit">&quot;5&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;6&quot;</span><span class="Punctuation">)</span><span class="Punctuation">)</span>
  748. <span class="Identifier">assert</span> <span class="Identifier">d</span> <span class="Operator">==</span> <span class="Punctuation">(</span><span class="StringLit">&quot;1&quot;</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="StringLit">&quot;4&quot;</span><span class="Punctuation">,</span> <span class="Punctuation">(</span><span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">6</span><span class="Punctuation">)</span><span class="Punctuation">)</span></pre>There are no constraints for the <tt class="docutils literal"><span class="pre"><span class="Identifier">constructor</span></span></tt> AST, it works for nested tuples of arrays of sets etc.
  749. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L1130" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  750. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L1130" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  751. </dd>
  752. </div>
  753. </div>
  754. </dl>
  755. </div>
  756. <div class="section" id="18">
  757. <h1><a class="toc-backref" href="#18">Templates</a></h1>
  758. <dl class="item">
  759. <div id="allIt-templates-all">
  760. <div id="allIt.t,untyped,untyped">
  761. <dt><pre><span class="Keyword">template</span> <a href="#allIt.t%2Cuntyped%2Cuntyped"><span class="Identifier">allIt</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">,</span> <span class="Identifier">pred</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a></pre></dt>
  762. <dd>
  763. <p>Iterates through a container and checks if every item fulfills the predicate.</p>
  764. <p>Unlike the <a class="reference external" href="#all,openArray[T],proc(T)">all proc</a>, the predicate needs to be an expression using the <tt class="docutils literal"><span class="pre"><span class="Identifier">it</span></span></tt> variable for testing, like: <tt class="docutils literal"><span class="pre"><span class="Identifier">allIt</span><span class="Punctuation">(</span><span class="StringLit">&quot;abba&quot;</span><span class="Punctuation">,</span> <span class="Identifier">it</span> <span class="Operator">==</span> <span class="CharLit">'a'</span><span class="Punctuation">)</span></span></tt>.</p>
  765. <p><strong>See also:</strong></p>
  766. <ul class="simple"><li><a class="reference external" href="#all,openArray[T],proc(T)">all proc</a></li>
  767. <li><a class="reference external" href="#anyIt.t,untyped,untyped">anyIt template</a></li>
  768. </ul>
  769. <p><strong class="examples_text">Example:</strong></p>
  770. <pre class="listing"><span class="Keyword">let</span> <span class="Identifier">numbers</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">,</span> <span class="DecNumber">9</span><span class="Punctuation">,</span> <span class="DecNumber">7</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span>
  771. <span class="Identifier">assert</span> <span class="Identifier">numbers</span><span class="Operator">.</span><span class="Identifier">allIt</span><span class="Punctuation">(</span><span class="Identifier">it</span> <span class="Operator">&lt;</span> <span class="DecNumber">10</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="Identifier">true</span>
  772. <span class="Identifier">assert</span> <span class="Identifier">numbers</span><span class="Operator">.</span><span class="Identifier">allIt</span><span class="Punctuation">(</span><span class="Identifier">it</span> <span class="Operator">&lt;</span> <span class="DecNumber">9</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="Identifier">false</span></pre>
  773. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L740" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  774. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L740" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  775. </dd>
  776. </div>
  777. </div>
  778. <div id="anyIt-templates-all">
  779. <div id="anyIt.t,untyped,untyped">
  780. <dt><pre><span class="Keyword">template</span> <a href="#anyIt.t%2Cuntyped%2Cuntyped"><span class="Identifier">anyIt</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">,</span> <span class="Identifier">pred</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#bool"><span class="Identifier">bool</span></a></pre></dt>
  781. <dd>
  782. <p>Iterates through a container and checks if at least one item fulfills the predicate.</p>
  783. <p>Unlike the <a class="reference external" href="#any,openArray[T],proc(T)">any proc</a>, the predicate needs to be an expression using the <tt class="docutils literal"><span class="pre"><span class="Identifier">it</span></span></tt> variable for testing, like: <tt class="docutils literal"><span class="pre"><span class="Identifier">anyIt</span><span class="Punctuation">(</span><span class="StringLit">&quot;abba&quot;</span><span class="Punctuation">,</span> <span class="Identifier">it</span> <span class="Operator">==</span> <span class="CharLit">'a'</span><span class="Punctuation">)</span></span></tt>.</p>
  784. <p><strong>See also:</strong></p>
  785. <ul class="simple"><li><a class="reference external" href="#any,openArray[T],proc(T)">any proc</a></li>
  786. <li><a class="reference external" href="#allIt.t,untyped,untyped">allIt template</a></li>
  787. </ul>
  788. <p><strong class="examples_text">Example:</strong></p>
  789. <pre class="listing"><span class="Keyword">let</span> <span class="Identifier">numbers</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">,</span> <span class="DecNumber">9</span><span class="Punctuation">,</span> <span class="DecNumber">7</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span>
  790. <span class="Identifier">assert</span> <span class="Identifier">numbers</span><span class="Operator">.</span><span class="Identifier">anyIt</span><span class="Punctuation">(</span><span class="Identifier">it</span> <span class="Operator">&gt;</span> <span class="DecNumber">8</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="Identifier">true</span>
  791. <span class="Identifier">assert</span> <span class="Identifier">numbers</span><span class="Operator">.</span><span class="Identifier">anyIt</span><span class="Punctuation">(</span><span class="Identifier">it</span> <span class="Operator">&gt;</span> <span class="DecNumber">9</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="Identifier">false</span></pre>
  792. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L782" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  793. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L782" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  794. </dd>
  795. </div>
  796. </div>
  797. <div id="applyIt-templates-all">
  798. <div id="applyIt.t,untyped,untyped">
  799. <dt><pre><span class="Keyword">template</span> <a href="#applyIt.t%2Cuntyped%2Cuntyped"><span class="Identifier">applyIt</span></a><span class="Other">(</span><span class="Identifier">varSeq</span><span class="Other">,</span> <span class="Identifier">op</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">)</span></pre></dt>
  800. <dd>
  801. <p>Convenience template around the mutable <tt class="docutils literal"><span class="pre"><span class="Identifier">apply</span></span></tt> proc to reduce typing.</p>
  802. <p>The template injects the <tt class="docutils literal"><span class="pre"><span class="Identifier">it</span></span></tt> variable which you can use directly in an expression. The expression has to return the same type as the elements of the sequence you are mutating.</p>
  803. <p><strong>See also:</strong></p>
  804. <ul class="simple"><li><a class="reference external" href="#apply,openArray[T],proc(T)_2">apply proc</a></li>
  805. <li><a class="reference external" href="#mapIt.t,typed,untyped">mapIt template</a></li>
  806. </ul>
  807. <p><strong class="examples_text">Example:</strong></p>
  808. <pre class="listing"><span class="Keyword">var</span> <span class="Identifier">nums</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span>
  809. <span class="Identifier">nums</span><span class="Operator">.</span><span class="Identifier">applyIt</span><span class="Punctuation">(</span><span class="Identifier">it</span> <span class="Operator">*</span> <span class="DecNumber">3</span><span class="Punctuation">)</span>
  810. <span class="Identifier">assert</span> <span class="Identifier">nums</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span> <span class="Operator">+</span> <span class="Identifier">nums</span><span class="Punctuation">[</span><span class="DecNumber">3</span><span class="Punctuation">]</span> <span class="Operator">==</span> <span class="DecNumber">15</span></pre>
  811. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L1068" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  812. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L1068" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  813. </dd>
  814. </div>
  815. </div>
  816. <div id="countIt-templates-all">
  817. <div id="countIt.t,untyped,untyped">
  818. <dt><pre><span class="Keyword">template</span> <a href="#countIt.t%2Cuntyped%2Cuntyped"><span class="Identifier">countIt</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">,</span> <span class="Identifier">pred</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a></pre></dt>
  819. <dd>
  820. <p>Returns a count of all the items that fulfill the predicate.</p>
  821. <p>The predicate needs to be an expression using the <tt class="docutils literal"><span class="pre"><span class="Identifier">it</span></span></tt> variable for testing, like: <tt class="docutils literal"><span class="pre"><span class="Identifier">countIt</span><span class="Punctuation">(</span><span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">]</span><span class="Punctuation">,</span> <span class="Identifier">it</span> <span class="Operator">&gt;</span> <span class="DecNumber">2</span><span class="Punctuation">)</span></span></tt>. </p>
  822. <p><strong class="examples_text">Example:</strong></p>
  823. <pre class="listing"><span class="Keyword">let</span> <span class="Identifier">numbers</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Operator">-</span><span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="Operator">-</span><span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="Operator">-</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">0</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">6</span><span class="Punctuation">]</span>
  824. <span class="Keyword">iterator</span> <span class="Identifier">iota</span><span class="Punctuation">(</span><span class="Identifier">n</span><span class="Punctuation">:</span> <span class="Identifier">int</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">int</span> <span class="Operator">=</span>
  825. <span class="Keyword">for</span> <span class="Identifier">i</span> <span class="Keyword">in</span> <span class="FloatNumber">0.</span><span class="Operator">.&lt;</span><span class="Identifier">n</span><span class="Punctuation">:</span> <span class="Keyword">yield</span> <span class="Identifier">i</span>
  826. <span class="Identifier">assert</span> <span class="Identifier">numbers</span><span class="Operator">.</span><span class="Identifier">countIt</span><span class="Punctuation">(</span><span class="Identifier">it</span> <span class="Operator">&lt;</span> <span class="DecNumber">0</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">3</span>
  827. <span class="Identifier">assert</span> <span class="Identifier">countIt</span><span class="Punctuation">(</span><span class="Identifier">iota</span><span class="Punctuation">(</span><span class="DecNumber">10</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="Identifier">it</span> <span class="Operator">&lt;</span> <span class="DecNumber">2</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="DecNumber">2</span></pre>
  828. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L704" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  829. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L704" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  830. </dd>
  831. </div>
  832. </div>
  833. <div id="filterIt-templates-all">
  834. <div id="filterIt.t,untyped,untyped">
  835. <dt><pre><span class="Keyword">template</span> <a href="#filterIt.t%2Cuntyped%2Cuntyped"><span class="Identifier">filterIt</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">,</span> <span class="Identifier">pred</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a></pre></dt>
  836. <dd>
  837. <p>Returns a new sequence with all the items of <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt> that fulfill the predicate <tt class="docutils literal"><span class="pre"><span class="Identifier">pred</span></span></tt>.</p>
  838. <p>Unlike the <a class="reference external" href="#filter,openArray[T],proc(T)">filter proc</a> and <a class="reference external" href="#filter.i,openArray[T],proc(T)">filter iterator</a>, the predicate needs to be an expression using the <tt class="docutils literal"><span class="pre"><span class="Identifier">it</span></span></tt> variable for testing, like: <tt class="docutils literal"><span class="pre"><span class="Identifier">filterIt</span><span class="Punctuation">(</span><span class="StringLit">&quot;abcxyz&quot;</span><span class="Punctuation">,</span> <span class="Identifier">it</span> <span class="Operator">==</span> <span class="CharLit">'x'</span><span class="Punctuation">)</span></span></tt>.</p>
  839. <p>Instead of using <tt class="docutils literal"><span class="pre"><span class="Identifier">mapIt</span></span></tt> and <tt class="docutils literal"><span class="pre"><span class="Identifier">filterIt</span></span></tt>, consider using the <tt class="docutils literal"><span class="pre"><span class="Identifier">collect</span></span></tt> macro from the <tt class="docutils literal"><span class="pre"><span class="Identifier">sugar</span></span></tt> module.</p>
  840. <p><strong>See also:</strong></p>
  841. <ul class="simple"><li><a class="reference external" href="sugar.html#collect.m%2Cuntyped%2Cuntyped">sugar.collect macro</a></li>
  842. <li><a class="reference external" href="#filter,openArray[T],proc(T)">filter proc</a></li>
  843. <li><a class="reference external" href="#filter.i,openArray[T],proc(T)">filter iterator</a></li>
  844. </ul>
  845. <p><strong class="examples_text">Example:</strong></p>
  846. <pre class="listing"><span class="Keyword">let</span>
  847. <span class="Identifier">temperatures</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Operator">-</span><span class="FloatNumber">272.15</span><span class="Punctuation">,</span> <span class="Operator">-</span><span class="FloatNumber">2.0</span><span class="Punctuation">,</span> <span class="FloatNumber">24.5</span><span class="Punctuation">,</span> <span class="FloatNumber">44.31</span><span class="Punctuation">,</span> <span class="FloatNumber">99.9</span><span class="Punctuation">,</span> <span class="Operator">-</span><span class="FloatNumber">113.44</span><span class="Punctuation">]</span>
  848. <span class="Identifier">acceptable</span> <span class="Operator">=</span> <span class="Identifier">temperatures</span><span class="Operator">.</span><span class="Identifier">filterIt</span><span class="Punctuation">(</span><span class="Identifier">it</span> <span class="Operator">&lt;</span> <span class="DecNumber">50</span> <span class="Keyword">and</span> <span class="Identifier">it</span> <span class="Operator">&gt;</span> <span class="Operator">-</span><span class="DecNumber">10</span><span class="Punctuation">)</span>
  849. <span class="Identifier">notAcceptable</span> <span class="Operator">=</span> <span class="Identifier">temperatures</span><span class="Operator">.</span><span class="Identifier">filterIt</span><span class="Punctuation">(</span><span class="Identifier">it</span> <span class="Operator">&gt;</span> <span class="DecNumber">50</span> <span class="Keyword">or</span> <span class="Identifier">it</span> <span class="Operator">&lt;</span> <span class="Operator">-</span><span class="DecNumber">10</span><span class="Punctuation">)</span>
  850. <span class="Identifier">assert</span> <span class="Identifier">acceptable</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Operator">-</span><span class="FloatNumber">2.0</span><span class="Punctuation">,</span> <span class="FloatNumber">24.5</span><span class="Punctuation">,</span> <span class="FloatNumber">44.31</span><span class="Punctuation">]</span>
  851. <span class="Identifier">assert</span> <span class="Identifier">notAcceptable</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="Operator">-</span><span class="FloatNumber">272.15</span><span class="Punctuation">,</span> <span class="FloatNumber">99.9</span><span class="Punctuation">,</span> <span class="Operator">-</span><span class="FloatNumber">113.44</span><span class="Punctuation">]</span></pre>
  852. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L644" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  853. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L644" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  854. </dd>
  855. </div>
  856. </div>
  857. <div id="foldl-templates-all">
  858. <div id="foldl.t,,,">
  859. <dt><pre><span class="Keyword">template</span> <a href="#foldl.t%2C%2C%2C"><span class="Identifier">foldl</span></a><span class="Other">(</span><span class="Identifier">sequence</span><span class="Other">,</span> <span class="Identifier">operation</span><span class="Other">,</span> <span class="Identifier">first</span><span class="Other">)</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a></pre></dt>
  860. <dd>
  861. <p>Template to fold a sequence from left to right, returning the accumulation.</p>
  862. <p>This version of <tt class="docutils literal"><span class="pre"><span class="Identifier">foldl</span></span></tt> gets a <strong>starting parameter</strong>. This makes it possible to accumulate the sequence into a different type than the sequence elements.</p>
  863. <p>The <tt class="docutils literal"><span class="pre"><span class="Identifier">operation</span></span></tt> parameter should be an expression which uses the variables <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt> and <tt class="docutils literal"><span class="pre"><span class="Identifier">b</span></span></tt> for each step of the fold. The <tt class="docutils literal"><span class="pre"><span class="Identifier">first</span></span></tt> parameter is the start value (the first <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt>) and therefore defines the type of the result.</p>
  864. <p><strong>See also:</strong></p>
  865. <ul class="simple"><li><a class="reference external" href="#foldr.t,untyped,untyped">foldr template</a></li>
  866. </ul>
  867. <p><strong class="examples_text">Example:</strong></p>
  868. <pre class="listing"><span class="Keyword">let</span>
  869. <span class="Identifier">numbers</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">,</span> <span class="DecNumber">8</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">]</span>
  870. <span class="Identifier">digits</span> <span class="Operator">=</span> <span class="Identifier">foldl</span><span class="Punctuation">(</span><span class="Identifier">numbers</span><span class="Punctuation">,</span> <span class="Identifier">a</span> <span class="Operator">&amp;</span> <span class="Punctuation">(</span><span class="Identifier">chr</span><span class="Punctuation">(</span><span class="Identifier">b</span> <span class="Operator">+</span> <span class="Identifier">ord</span><span class="Punctuation">(</span><span class="Punctuation">'</span><span class="DecNumber">0'</span><span class="Punctuation">)</span><span class="Punctuation">)</span><span class="Punctuation">)</span><span class="Punctuation">,</span> <span class="StringLit">&quot;&quot;</span><span class="Punctuation">)</span>
  871. <span class="Identifier">assert</span> <span class="Identifier">digits</span> <span class="Operator">==</span> <span class="StringLit">&quot;0815&quot;</span></pre>
  872. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L934" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  873. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L934" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  874. </dd>
  875. </div>
  876. <div id="foldl.t,untyped,untyped">
  877. <dt><pre><span class="Keyword">template</span> <a href="#foldl.t%2Cuntyped%2Cuntyped"><span class="Identifier">foldl</span></a><span class="Other">(</span><span class="Identifier">sequence</span><span class="Other">,</span> <span class="Identifier">operation</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a></pre></dt>
  878. <dd>
  879. <p>Template to fold a sequence from left to right, returning the accumulation.</p>
  880. <p>The sequence is required to have at least a single element. Debug versions of your program will assert in this situation but release versions will happily go ahead. If the sequence has a single element it will be returned without applying <tt class="docutils literal"><span class="pre"><span class="Identifier">operation</span></span></tt>.</p>
  881. <p>The <tt class="docutils literal"><span class="pre"><span class="Identifier">operation</span></span></tt> parameter should be an expression which uses the variables <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt> and <tt class="docutils literal"><span class="pre"><span class="Identifier">b</span></span></tt> for each step of the fold. Since this is a left fold, for non associative binary operations like subtraction think that the sequence of numbers 1, 2 and 3 will be parenthesized as (((1) - 2) - 3).</p>
  882. <p><strong>See also:</strong></p>
  883. <ul class="simple"><li><a class="reference external" href="#foldl.t,,,">foldl template</a> with a starting parameter</li>
  884. <li><a class="reference external" href="#foldr.t,untyped,untyped">foldr template</a></li>
  885. </ul>
  886. <p><strong class="examples_text">Example:</strong></p>
  887. <pre class="listing"><span class="Keyword">let</span>
  888. <span class="Identifier">numbers</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">9</span><span class="Punctuation">,</span> <span class="DecNumber">11</span><span class="Punctuation">]</span>
  889. <span class="Identifier">addition</span> <span class="Operator">=</span> <span class="Identifier">foldl</span><span class="Punctuation">(</span><span class="Identifier">numbers</span><span class="Punctuation">,</span> <span class="Identifier">a</span> <span class="Operator">+</span> <span class="Identifier">b</span><span class="Punctuation">)</span>
  890. <span class="Identifier">subtraction</span> <span class="Operator">=</span> <span class="Identifier">foldl</span><span class="Punctuation">(</span><span class="Identifier">numbers</span><span class="Punctuation">,</span> <span class="Identifier">a</span> <span class="Operator">-</span> <span class="Identifier">b</span><span class="Punctuation">)</span>
  891. <span class="Identifier">multiplication</span> <span class="Operator">=</span> <span class="Identifier">foldl</span><span class="Punctuation">(</span><span class="Identifier">numbers</span><span class="Punctuation">,</span> <span class="Identifier">a</span> <span class="Operator">*</span> <span class="Identifier">b</span><span class="Punctuation">)</span>
  892. <span class="Identifier">words</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;nim&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;is&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;cool&quot;</span><span class="Punctuation">]</span>
  893. <span class="Identifier">concatenation</span> <span class="Operator">=</span> <span class="Identifier">foldl</span><span class="Punctuation">(</span><span class="Identifier">words</span><span class="Punctuation">,</span> <span class="Identifier">a</span> <span class="Operator">&amp;</span> <span class="Identifier">b</span><span class="Punctuation">)</span>
  894. <span class="Identifier">procs</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;proc&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;Is&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;Also&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;Fine&quot;</span><span class="Punctuation">]</span>
  895. <span class="Keyword">func</span> <span class="Identifier">foo</span><span class="Punctuation">(</span><span class="Identifier">acc</span><span class="Punctuation">,</span> <span class="Identifier">cur</span><span class="Punctuation">:</span> <span class="Identifier">string</span><span class="Punctuation">)</span><span class="Punctuation">:</span> <span class="Identifier">string</span> <span class="Operator">=</span>
  896. <span class="Identifier">result</span> <span class="Operator">=</span> <span class="Identifier">acc</span> <span class="Operator">&amp;</span> <span class="Identifier">cur</span>
  897. <span class="Identifier">assert</span> <span class="Identifier">addition</span> <span class="Operator">==</span> <span class="DecNumber">25</span><span class="Punctuation">,</span> <span class="StringLit">&quot;Addition is (((5)+9)+11)&quot;</span>
  898. <span class="Identifier">assert</span> <span class="Identifier">subtraction</span> <span class="Operator">==</span> <span class="Operator">-</span><span class="DecNumber">15</span><span class="Punctuation">,</span> <span class="StringLit">&quot;Subtraction is (((5)-9)-11)&quot;</span>
  899. <span class="Identifier">assert</span> <span class="Identifier">multiplication</span> <span class="Operator">==</span> <span class="DecNumber">495</span><span class="Punctuation">,</span> <span class="StringLit">&quot;Multiplication is (((5)*9)*11)&quot;</span>
  900. <span class="Identifier">assert</span> <span class="Identifier">concatenation</span> <span class="Operator">==</span> <span class="StringLit">&quot;nimiscool&quot;</span>
  901. <span class="Identifier">assert</span> <span class="Identifier">foldl</span><span class="Punctuation">(</span><span class="Identifier">procs</span><span class="Punctuation">,</span> <span class="Identifier">foo</span><span class="Punctuation">(</span><span class="Identifier">a</span><span class="Punctuation">,</span> <span class="Identifier">b</span><span class="Punctuation">)</span><span class="Punctuation">)</span> <span class="Operator">==</span> <span class="StringLit">&quot;procIsAlsoFine&quot;</span></pre>
  902. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L885" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  903. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L885" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  904. </dd>
  905. </div>
  906. </div>
  907. <div id="foldr-templates-all">
  908. <div id="foldr.t,untyped,untyped">
  909. <dt><pre><span class="Keyword">template</span> <a href="#foldr.t%2Cuntyped%2Cuntyped"><span class="Identifier">foldr</span></a><span class="Other">(</span><span class="Identifier">sequence</span><span class="Other">,</span> <span class="Identifier">operation</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a></pre></dt>
  910. <dd>
  911. <p>Template to fold a sequence from right to left, returning the accumulation.</p>
  912. <p>The sequence is required to have at least a single element. Debug versions of your program will assert in this situation but release versions will happily go ahead. If the sequence has a single element it will be returned without applying <tt class="docutils literal"><span class="pre"><span class="Identifier">operation</span></span></tt>.</p>
  913. <p>The <tt class="docutils literal"><span class="pre"><span class="Identifier">operation</span></span></tt> parameter should be an expression which uses the variables <tt class="docutils literal"><span class="pre"><span class="Identifier">a</span></span></tt> and <tt class="docutils literal"><span class="pre"><span class="Identifier">b</span></span></tt> for each step of the fold. Since this is a right fold, for non associative binary operations like subtraction think that the sequence of numbers 1, 2 and 3 will be parenthesized as (1 - (2 - (3))).</p>
  914. <p><strong>See also:</strong></p>
  915. <ul class="simple"><li><a class="reference external" href="#foldl.t,untyped,untyped">foldl template</a></li>
  916. <li><a class="reference external" href="#foldl.t,,,">foldl template</a> with a starting parameter</li>
  917. </ul>
  918. <p><strong class="examples_text">Example:</strong></p>
  919. <pre class="listing"><span class="Keyword">let</span>
  920. <span class="Identifier">numbers</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="DecNumber">9</span><span class="Punctuation">,</span> <span class="DecNumber">11</span><span class="Punctuation">]</span>
  921. <span class="Identifier">addition</span> <span class="Operator">=</span> <span class="Identifier">foldr</span><span class="Punctuation">(</span><span class="Identifier">numbers</span><span class="Punctuation">,</span> <span class="Identifier">a</span> <span class="Operator">+</span> <span class="Identifier">b</span><span class="Punctuation">)</span>
  922. <span class="Identifier">subtraction</span> <span class="Operator">=</span> <span class="Identifier">foldr</span><span class="Punctuation">(</span><span class="Identifier">numbers</span><span class="Punctuation">,</span> <span class="Identifier">a</span> <span class="Operator">-</span> <span class="Identifier">b</span><span class="Punctuation">)</span>
  923. <span class="Identifier">multiplication</span> <span class="Operator">=</span> <span class="Identifier">foldr</span><span class="Punctuation">(</span><span class="Identifier">numbers</span><span class="Punctuation">,</span> <span class="Identifier">a</span> <span class="Operator">*</span> <span class="Identifier">b</span><span class="Punctuation">)</span>
  924. <span class="Identifier">words</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;nim&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;is&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;cool&quot;</span><span class="Punctuation">]</span>
  925. <span class="Identifier">concatenation</span> <span class="Operator">=</span> <span class="Identifier">foldr</span><span class="Punctuation">(</span><span class="Identifier">words</span><span class="Punctuation">,</span> <span class="Identifier">a</span> <span class="Operator">&amp;</span> <span class="Identifier">b</span><span class="Punctuation">)</span>
  926. <span class="Identifier">assert</span> <span class="Identifier">addition</span> <span class="Operator">==</span> <span class="DecNumber">25</span><span class="Punctuation">,</span> <span class="StringLit">&quot;Addition is (5+(9+(11)))&quot;</span>
  927. <span class="Identifier">assert</span> <span class="Identifier">subtraction</span> <span class="Operator">==</span> <span class="DecNumber">7</span><span class="Punctuation">,</span> <span class="StringLit">&quot;Subtraction is (5-(9-(11)))&quot;</span>
  928. <span class="Identifier">assert</span> <span class="Identifier">multiplication</span> <span class="Operator">==</span> <span class="DecNumber">495</span><span class="Punctuation">,</span> <span class="StringLit">&quot;Multiplication is (5*(9*(11)))&quot;</span>
  929. <span class="Identifier">assert</span> <span class="Identifier">concatenation</span> <span class="Operator">==</span> <span class="StringLit">&quot;nimiscool&quot;</span></pre>
  930. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L961" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  931. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L961" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  932. </dd>
  933. </div>
  934. </div>
  935. <div id="keepItIf-templates-all">
  936. <div id="keepItIf.t,seq,untyped">
  937. <dt><pre><span class="Keyword">template</span> <a href="#keepItIf.t%2Cseq%2Cuntyped"><span class="Identifier">keepItIf</span></a><span class="Other">(</span><span class="Identifier">varSeq</span><span class="Other">:</span> <a href="system.html#seq"><span class="Identifier">seq</span></a><span class="Other">;</span> <span class="Identifier">pred</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">)</span></pre></dt>
  938. <dd>
  939. <p>Keeps the items in the passed sequence (must be declared as a <tt class="docutils literal"><span class="pre"><span class="Keyword">var</span></span></tt>) if they fulfill the predicate.</p>
  940. <p>Unlike the <a class="reference external" href="#keepIf,seq[T],proc(T)">keepIf proc</a>, the predicate needs to be an expression using the <tt class="docutils literal"><span class="pre"><span class="Identifier">it</span></span></tt> variable for testing, like: <tt class="docutils literal"><span class="pre"><span class="Identifier">keepItIf</span><span class="Punctuation">(</span><span class="StringLit">&quot;abcxyz&quot;</span><span class="Punctuation">,</span> <span class="Identifier">it</span> <span class="Operator">==</span> <span class="CharLit">'x'</span><span class="Punctuation">)</span></span></tt>.</p>
  941. <p><strong>See also:</strong></p>
  942. <ul class="simple"><li><a class="reference external" href="#keepIf,seq[T],proc(T)">keepIf proc</a></li>
  943. <li><a class="reference external" href="#filterIt.t,untyped,untyped">filterIt template</a></li>
  944. </ul>
  945. <p><strong class="examples_text">Example:</strong></p>
  946. <pre class="listing"><span class="Keyword">var</span> <span class="Identifier">candidates</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;foo&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;bar&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;baz&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;foobar&quot;</span><span class="Punctuation">]</span>
  947. <span class="Identifier">candidates</span><span class="Operator">.</span><span class="Identifier">keepItIf</span><span class="Punctuation">(</span><span class="Identifier">it</span><span class="Operator">.</span><span class="Identifier">len</span> <span class="Operator">==</span> <span class="DecNumber">3</span> <span class="Keyword">and</span> <span class="Identifier">it</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span> <span class="Operator">==</span> <span class="CharLit">'b'</span><span class="Punctuation">)</span>
  948. <span class="Identifier">assert</span> <span class="Identifier">candidates</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;bar&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;baz&quot;</span><span class="Punctuation">]</span></pre>
  949. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L674" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  950. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L674" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  951. </dd>
  952. </div>
  953. </div>
  954. <div id="mapIt-templates-all">
  955. <div id="mapIt.t,typed,untyped">
  956. <dt><pre><span class="Keyword">template</span> <a href="#mapIt.t%2Ctyped%2Cuntyped"><span class="Identifier">mapIt</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <a href="system.html#typed"><span class="Identifier">typed</span></a><span class="Other">;</span> <span class="Identifier">op</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a></pre></dt>
  957. <dd>
  958. <p>Returns a new sequence with the results of the <tt class="docutils literal"><span class="pre"><span class="Identifier">op</span></span></tt> proc applied to every item in the container <tt class="docutils literal"><span class="pre"><span class="Identifier">s</span></span></tt>.</p>
  959. <p>Since the input is not modified you can use it to transform the type of the elements in the input container.</p>
  960. <p>The template injects the <tt class="docutils literal"><span class="pre"><span class="Identifier">it</span></span></tt> variable which you can use directly in an expression.</p>
  961. <p>Instead of using <tt class="docutils literal"><span class="pre"><span class="Identifier">mapIt</span></span></tt> and <tt class="docutils literal"><span class="pre"><span class="Identifier">filterIt</span></span></tt>, consider using the <tt class="docutils literal"><span class="pre"><span class="Identifier">collect</span></span></tt> macro from the <tt class="docutils literal"><span class="pre"><span class="Identifier">sugar</span></span></tt> module.</p>
  962. <p><strong>See also:</strong></p>
  963. <ul class="simple"><li><a class="reference external" href="sugar.html#collect.m%2Cuntyped%2Cuntyped">sugar.collect macro</a></li>
  964. <li><a class="reference external" href="#map,openArray[T],proc(T)">map proc</a></li>
  965. <li><a class="reference external" href="#applyIt.t,untyped,untyped">applyIt template</a> for the in-place version</li>
  966. </ul>
  967. <p><strong class="examples_text">Example:</strong></p>
  968. <pre class="listing"><span class="Keyword">let</span>
  969. <span class="Identifier">nums</span> <span class="Operator">=</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">]</span>
  970. <span class="Identifier">strings</span> <span class="Operator">=</span> <span class="Identifier">nums</span><span class="Operator">.</span><span class="Identifier">mapIt</span><span class="Punctuation">(</span><span class="Operator">$</span><span class="Punctuation">(</span><span class="DecNumber">4</span> <span class="Operator">*</span> <span class="Identifier">it</span><span class="Punctuation">)</span><span class="Punctuation">)</span>
  971. <span class="Identifier">assert</span> <span class="Identifier">strings</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="StringLit">&quot;4&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;8&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;12&quot;</span><span class="Punctuation">,</span> <span class="StringLit">&quot;16&quot;</span><span class="Punctuation">]</span></pre>
  972. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L1003" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  973. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L1003" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  974. </dd>
  975. </div>
  976. </div>
  977. <div id="newSeqWith-templates-all">
  978. <div id="newSeqWith.t,int,untyped">
  979. <dt><pre><span class="Keyword">template</span> <a href="#newSeqWith.t%2Cint%2Cuntyped"><span class="Identifier">newSeqWith</span></a><span class="Other">(</span><span class="Identifier">len</span><span class="Other">:</span> <a href="system.html#int"><span class="Identifier">int</span></a><span class="Other">;</span> <span class="Identifier">init</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a></pre></dt>
  980. <dd>
  981. <p>Creates a new <tt class="docutils literal"><span class="pre"><span class="Identifier">seq</span></span></tt> of length <tt class="docutils literal"><span class="pre"><span class="Identifier">len</span></span></tt>, calling <tt class="docutils literal"><span class="pre"><span class="Identifier">init</span></span></tt> to initialize each value of the seq.</p>
  982. <p>Useful for creating &quot;2D&quot; seqs - seqs containing other seqs or to populate fields of the created seq.</p>
  983. <p><strong class="examples_text">Example:</strong></p>
  984. <pre class="listing"><span class="Comment">## Creates a seq containing 5 bool seqs, each of length of 3.</span>
  985. <span class="Keyword">var</span> <span class="Identifier">seq2D</span> <span class="Operator">=</span> <span class="Identifier">newSeqWith</span><span class="Punctuation">(</span><span class="DecNumber">5</span><span class="Punctuation">,</span> <span class="Identifier">newSeq</span><span class="Punctuation">[</span><span class="Identifier">bool</span><span class="Punctuation">]</span><span class="Punctuation">(</span><span class="DecNumber">3</span><span class="Punctuation">)</span><span class="Punctuation">)</span>
  986. <span class="Identifier">assert</span> <span class="Identifier">seq2D</span><span class="Operator">.</span><span class="Identifier">len</span> <span class="Operator">==</span> <span class="DecNumber">5</span>
  987. <span class="Identifier">assert</span> <span class="Identifier">seq2D</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span><span class="Operator">.</span><span class="Identifier">len</span> <span class="Operator">==</span> <span class="DecNumber">3</span>
  988. <span class="Identifier">assert</span> <span class="Identifier">seq2D</span><span class="Punctuation">[</span><span class="DecNumber">4</span><span class="Punctuation">]</span><span class="Punctuation">[</span><span class="DecNumber">2</span><span class="Punctuation">]</span> <span class="Operator">==</span> <span class="Identifier">false</span>
  989. <span class="Comment">## Creates a seq with random numbers</span>
  990. <span class="Keyword">import</span> <span class="Identifier">std</span><span class="Operator">/</span><span class="Identifier">random</span>
  991. <span class="Keyword">var</span> <span class="Identifier">seqRand</span> <span class="Operator">=</span> <span class="Identifier">newSeqWith</span><span class="Punctuation">(</span><span class="DecNumber">20</span><span class="Punctuation">,</span> <span class="Identifier">rand</span><span class="Punctuation">(</span><span class="FloatNumber">1.0</span><span class="Punctuation">)</span><span class="Punctuation">)</span>
  992. <span class="Identifier">assert</span> <span class="Identifier">seqRand</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span> <span class="Operator">!=</span> <span class="Identifier">seqRand</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">]</span></pre>
  993. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L1089" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  994. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L1089" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  995. </dd>
  996. </div>
  997. </div>
  998. <div id="toSeq-templates-all">
  999. <div id="toSeq.t,untyped">
  1000. <dt><pre><span class="Keyword">template</span> <a href="#toSeq.t%2Cuntyped"><span class="Identifier">toSeq</span></a><span class="Other">(</span><span class="Identifier">iter</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a><span class="Other">)</span><span class="Other">:</span> <a href="system.html#untyped"><span class="Identifier">untyped</span></a></pre></dt>
  1001. <dd>
  1002. Transforms any iterable (anything that can be iterated over, e.g. with a for-loop) into a sequence.
  1003. <p><strong class="examples_text">Example:</strong></p>
  1004. <pre class="listing"><span class="Keyword">let</span>
  1005. <span class="Identifier">myRange</span> <span class="Operator">=</span> <span class="FloatNumber">1.</span><span class="Operator">.</span><span class="DecNumber">5</span>
  1006. <span class="Identifier">mySet</span><span class="Punctuation">:</span> <span class="Identifier">set</span><span class="Punctuation">[</span><span class="Identifier">int8</span><span class="Punctuation">]</span> <span class="Operator">=</span> <span class="Punctuation">{</span><span class="DecNumber">5'i8</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">}</span>
  1007. <span class="Identifier">assert</span> <span class="Identifier">typeof</span><span class="Punctuation">(</span><span class="Identifier">myRange</span><span class="Punctuation">)</span> <span class="Keyword">is</span> <span class="Identifier">HSlice</span><span class="Punctuation">[</span><span class="Identifier">system</span><span class="Operator">.</span><span class="Identifier">int</span><span class="Punctuation">,</span> <span class="Identifier">system</span><span class="Operator">.</span><span class="Identifier">int</span><span class="Punctuation">]</span>
  1008. <span class="Identifier">assert</span> <span class="Identifier">typeof</span><span class="Punctuation">(</span><span class="Identifier">mySet</span><span class="Punctuation">)</span> <span class="Keyword">is</span> <span class="Identifier">set</span><span class="Punctuation">[</span><span class="Identifier">int8</span><span class="Punctuation">]</span>
  1009. <span class="Keyword">let</span>
  1010. <span class="Identifier">mySeq1</span> <span class="Operator">=</span> <span class="Identifier">toSeq</span><span class="Punctuation">(</span><span class="Identifier">myRange</span><span class="Punctuation">)</span>
  1011. <span class="Identifier">mySeq2</span> <span class="Operator">=</span> <span class="Identifier">toSeq</span><span class="Punctuation">(</span><span class="Identifier">mySet</span><span class="Punctuation">)</span>
  1012. <span class="Identifier">assert</span> <span class="Identifier">mySeq1</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="DecNumber">2</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">4</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">]</span>
  1013. <span class="Identifier">assert</span> <span class="Identifier">mySeq2</span> <span class="Operator">==</span> <span class="Operator">@</span><span class="Punctuation">[</span><span class="DecNumber">1'i8</span><span class="Punctuation">,</span> <span class="DecNumber">3</span><span class="Punctuation">,</span> <span class="DecNumber">5</span><span class="Punctuation">]</span></pre>
  1014. <a href="https://github.com/nim-lang/Nim/tree/devel/lib/pure/collections/sequtils.nim#L847" class="link-seesrc" target="_blank">Source</a>&nbsp;&nbsp;
  1015. <a href="https://github.com/nim-lang/Nim/edit/devel/lib/pure/collections/sequtils.nim#L847" class="link-seesrc" target="_blank" >Edit</a>&nbsp;&nbsp;
  1016. </dd>
  1017. </div>
  1018. </div>
  1019. </dl>
  1020. </div>
  1021. </div>
  1022. </div>
  1023. <div class="twelve-columns footer">
  1024. <span class="nim-sprite"></span>
  1025. <br>
  1026. <small style="color: var(--hint);">Made with Nim. Generated: 2025-03-12 16:39:43 UTC</small>
  1027. </div>
  1028. </div>
  1029. </div>
  1030. <script defer data-domain="nim-lang.org" src="https://plausible.io/js/plausible.js"></script>
  1031. </body>
  1032. </html>