444 lines
No EOL
262 KiB
HTML
444 lines
No EOL
262 KiB
HTML
<!doctype html>
|
||
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-chap-6/g-b-the-loop-facility" data-has-hydrated="false">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="generator" content="Docusaurus v3.0.1">
|
||
<title data-rh="true">6.1 The LOOP Facility | Common Lisp (New) Language Reference</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://lisp-docs.github.io/cl-language-reference/img/1024px-Lisp_logo.svg.png"><meta data-rh="true" name="twitter:image" content="https://lisp-docs.github.io/cl-language-reference/img/1024px-Lisp_logo.svg.png"><meta data-rh="true" property="og:url" content="https://lisp-docs.github.io/cl-language-reference/chap-6/g-b-the-loop-facility"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="google-site-verification" content="Vzaw013_bfdKeUVG89Ch3W1zC9_vH9ID2dPB9Dz0vr0"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="6.1 The LOOP Facility | Common Lisp (New) Language Reference"><meta data-rh="true" name="description" content="6.1.1 Overview of the Loop Facility"><meta data-rh="true" property="og:description" content="6.1.1 Overview of the Loop Facility"><link data-rh="true" rel="icon" href="../img/favicon.ico"><link data-rh="true" rel="canonical" href="g-b-the-loop-facility.html"><link data-rh="true" rel="alternate" href="g-b-the-loop-facility.html" hreflang="en"><link data-rh="true" rel="alternate" href="g-b-the-loop-facility.html" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://C1F2Q5VM6X-dsn.algolia.net" crossorigin="anonymous"><link rel="preconnect" href="https://www.google-analytics.com">
|
||
<link rel="preconnect" href="https://www.googletagmanager.com">
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-8TJCE4NSF8"></script>
|
||
<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-8TJCE4NSF8",{})</script>
|
||
|
||
|
||
<link rel="search" type="application/opensearchdescription+xml" title="Common Lisp (New) Language Reference" href="../opensearch.xml"><link rel="stylesheet" href="../assets/css/styles.f13b59fe.css">
|
||
<script src="../assets/js/runtime~main.02699c25.js" defer="defer"></script>
|
||
<script src="../assets/js/main.4f0a7a76.js" defer="defer"></script>
|
||
</head>
|
||
<body class="navigation-with-keyboard">
|
||
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="g-b-the-loop-facility.html#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a href="../../index.html" target="_blank" rel="noopener noreferrer" class="navbar__brand"><div class="navbar__logo"><img src="../img/logo.svg" alt="Lisp Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="../img/logo.svg" alt="Lisp Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Common Lisp Docs</b></a><a href="../../docs/tutorial/index.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Tutorial</a><a href="../index.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Technical Reference</a><a href="../../docs/whylisp.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Why Lisp?</a><a href="../../docs/howto.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Guides</a></div><div class="navbar__items navbar__items--right"><a href="../../docs/contribute.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Contribute!</a><a href="../../docs/help.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Getting Help</a><a href="../../docs/about.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">About</a><a href="../../blog.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Blog</a><a href="https://github.com/lisp-docs" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="../index.html">Introduction</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-0/intro.html">Contents and Figures</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-1/b-b-scope-purpose-and-history.html">1. Introduction</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-2/c-b-character-syntax.html">2. Syntax</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-3/d-b-evaluation.html">3. Evaluation and Compilation</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-4/e-b-introduction.html">4. Types and Classes</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-5/f-b-generalized-reference.html">5. Data and Control Flow</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="g-b-the-loop-facility.html">6. Iteration</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="g-b-the-loop-facility.html">6.1 The LOOP Facility</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="../category/62-iteration-dictionary.html">6.2 Iteration Dictionary</a><button aria-label="Expand sidebar category '6.2 Iteration Dictionary'" type="button" class="clean-btn menu__caret"></button></div></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-7/h-b-object-creation-and-initialization.html">7. Objects</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../category/81-structures-dictionary.html">8. Structures</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-9/j-b-condition-system-concepts.html">9. Conditions</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-10/ba-b-symbol-concepts.html">10. Symbols</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-11/bb-b-package-concepts.html">11. Packages</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-12/bc-b-number-concepts.html">12. Numbers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-13/bd-b-character-concepts.html">13. Characters</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-14/be-b-cons-concepts.html">14. Conses</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-15/bf-b-array-concepts.html">15. Arrays</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-16/bg-b-string-concepts.html">16. Strings</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-17/bh-b-sequence-concepts.html">17. Sequences</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-18/bi-b-hash-table-concepts.html">18. Hash Tables</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-19/bj-b-overview-of-filenames.html">19. Filenames</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-20/ca-b-file-system-concepts.html">20. Files</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-21/cb-b-stream-concepts.html">21. Streams</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-22/cc-b-the-lisp-printer.html">22. Printer</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-23/cd-b-reader-concepts.html">23. Reader</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-24/ce-b-system-construction-concepts.html">24. System Construction</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-25/cf-b-the-external-environment.html">25. External Environment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../environments.html">26. Environments</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../meta-object-protocol.html">27. Meta Object Protocol</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../data-structures.html">28. Data Structures</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../portability/trivial-packages.html">29. Portability</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="../dictionary-entries.html">dictionary-entries</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-26/intro.html">Glossary</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="../index.html"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">6. Iteration</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">6.1 The LOOP Facility</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>6.1 The LOOP Facility</h1>
|
||
<!-- -->
|
||
<!-- -->
|
||
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="611-overview-of-the-loop-facility">6.1.1 Overview of the Loop Facility<a href="g-b-the-loop-facility.html#611-overview-of-the-loop-facility" class="hash-link" aria-label="Direct link to 6.1.1 Overview of the Loop Facility" title="Direct link to 6.1.1 Overview of the Loop Facility"></a></h2>
|
||
<!-- -->
|
||
<p>The <span><b>loop</b></span> <span><i>macro</i></span> performs iteration.</p>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6111-simple-vs-extended-loop">6.1.1.1 Simple vs Extended Loop<a href="g-b-the-loop-facility.html#6111-simple-vs-extended-loop" class="hash-link" aria-label="Direct link to 6.1.1.1 Simple vs Extended Loop" title="Direct link to 6.1.1.1 Simple vs Extended Loop"></a></h3>
|
||
<!-- -->
|
||
<p><span><b>loop</b></span> <span><i>forms</i></span> are partitioned into two categories: simple <span><b>loop</b></span> <span><i>forms</i></span> and extended <span><b>loop</b></span> <span><i>forms</i></span>.</p>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61111-simple-loop">6.1.1.1.1 Simple Loop<a href="g-b-the-loop-facility.html#61111-simple-loop" class="hash-link" aria-label="Direct link to 6.1.1.1.1 Simple Loop" title="Direct link to 6.1.1.1.1 Simple Loop"></a></h4>
|
||
<!-- -->
|
||
<p>A simple <span><b>loop</b></span> <span><i>form</i></span> is one that has a body containing only <span><i>compound forms</i></span>. Each <span><i>form</i></span> is <em>evaluated</em> in turn from left to right. When the last <span><i>form</i></span> has been <em>evaluated</em>, then the first <span><i>form</i></span> is evaluated again, and so on, in a never-ending cycle. A simple <span><b>loop</b></span> <span><i>form</i></span> establishes an <span><i>implicit block</i></span> named</p>
|
||
<p><span><b>nil</b></span>. The execution of a simple <span><b>loop</b></span> can be terminated by explicitly transfering control to the <span><i>implicit block</i></span> (using <span><b>return</b></span> or <span><b>return-from</b></span>) or to some <span><i>exit point</i></span> outside of the <span><i>block</i></span> (<em>e.g.</em>, using <span><b>throw</b></span>, <span><b>go</b></span>, or <span><b>return-from</b></span>).</p>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61112-extended-loop">6.1.1.1.2 Extended Loop<a href="g-b-the-loop-facility.html#61112-extended-loop" class="hash-link" aria-label="Direct link to 6.1.1.1.2 Extended Loop" title="Direct link to 6.1.1.1.2 Extended Loop"></a></h4>
|
||
<!-- -->
|
||
<p>An extended <span><b>loop</b></span> <span><i>form</i></span> is one that has a body containing <em>atomic expressions</em>. When the <span><b>loop</b></span> <span><i>macro</i></span> processes such a <span><i>form</i></span>, it invokes a facility that is commonly called “the Loop Facility.”</p>
|
||
<p>The Loop Facility provides standardized access to mechanisms commonly used in iterations through Loop schemas, which are introduced by <span><i>loop keywords</i></span>.</p>
|
||
<p>The body of an extended <span><b>loop</b></span> <span><i>form</i></span> is divided into <span><b>loop</b></span> clauses, each which is in turn made up of <span><i>loop keywords</i></span> and <span><i>forms</i></span>.</p>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6112-loop-keywords">6.1.1.2 Loop Keywords<a href="g-b-the-loop-facility.html#6112-loop-keywords" class="hash-link" aria-label="Direct link to 6.1.1.2 Loop Keywords" title="Direct link to 6.1.1.2 Loop Keywords"></a></h3>
|
||
<!-- -->
|
||
<p><span><i>Loop keywords</i></span> are not true <span><i>keywords</i></span><sub>1</sub>; they are special <span><i>symbols</i></span>, recognized by <span><i>name</i></span> rather than <span><i>object</i></span> identity, that are meaningful only to the <span><b>loop</b></span> facility. A <span><i>loop keyword</i></span> is a <span><i>symbol</i></span> but is recognized by its <span><i>name</i></span> (not its identity), regardless of the <span><i>packages</i></span> in which it is <span><i>accessible</i></span>.</p>
|
||
<p>In general, <span><i>loop keywords</i></span> are not <span><i>external symbols</i></span> of the COMMON-LISP <span><i>package</i></span>, except in the coincidental situation that a <span><i>symbol</i></span> with the same name as a <span><i>loop keyword</i></span> was needed for some other purpose in Common Lisp. For example, there is a <span><i>symbol</i></span> in the COMMON-LISP <span><i>package</i></span> whose <span><i>name</i></span> is "UNLESS" but not one whose <span><i>name</i></span> is "UNTIL".</p>
|
||
<p>If no <span><i>loop keywords</i></span> are supplied in a <span><b>loop</b></span> <span><i>form</i></span>, the Loop Facility executes the loop body repeatedly; see Section 6.1.1.1.1 (Simple Loop).</p>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6113-parsing-loop-clauses">6.1.1.3 Parsing Loop Clauses<a href="g-b-the-loop-facility.html#6113-parsing-loop-clauses" class="hash-link" aria-label="Direct link to 6.1.1.3 Parsing Loop Clauses" title="Direct link to 6.1.1.3 Parsing Loop Clauses"></a></h3>
|
||
<!-- -->
|
||
<p>The syntactic parts of an extended <span><b>loop</b></span> <span><i>form</i></span> are called clauses; the rules for parsing are determined by that clause’s keyword. The following example shows a <span><b>loop</b></span> <span><i>form</i></span> with six clauses:</p>
|
||
<p>(loop for i from 1 to (compute-top-value) ; first clause</p>
|
||
<p>while (not (unacceptable i)) ; second clause</p>
|
||
<p>collect (square i) ; third clause</p>
|
||
<p>do (format t "Working on ~D now" i) ; fourth clause</p>
|
||
<p>when (evenp i) ; fifth clause</p>
|
||
<p>do (format t "~D is a non-odd number" i)</p>
|
||
<p>finally (format t "About to exit!")) ; sixth clause</p>
|
||
<p>Each <span><i>loop keyword</i></span> introduces either a compound loop clause or a simple loop clause that can consist of a <span><i>loop keyword</i></span> followed by a single <span><i>form</i></span>. The number of <span><i>forms</i></span> in a clause is determined by the <span><i>loop keyword</i></span> that begins the clause and by the auxiliary keywords in the clause. The keywords do, doing, initially, and finally are the only loop keywords that can take any number of <span><i>forms</i></span> and group them as an <span><i>implicit progn</i></span>.</p>
|
||
<p>Loop clauses can contain auxiliary keywords, which are sometimes called prepositions. For example, the first clause in the code above includes the prepositions from and to, which mark the value from which stepping begins and the value at which stepping ends.</p>
|
||
<p>For detailed information about <span><b>loop</b></span> syntax, see the <span><i>macro</i></span> <span><b>loop</b></span>.</p>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6114-expanding-loop-forms">6.1.1.4 Expanding Loop Forms<a href="g-b-the-loop-facility.html#6114-expanding-loop-forms" class="hash-link" aria-label="Direct link to 6.1.1.4 Expanding Loop Forms" title="Direct link to 6.1.1.4 Expanding Loop Forms"></a></h3>
|
||
<!-- -->
|
||
<p>A <span><b>loop</b></span> <span><i>macro form</i></span> expands into a <span><i>form</i></span> containing one or more binding forms (that <em>establish bindings</em> of loop variables) and a <span><b>block</b></span> and a <span><b>tagbody</b></span> (that express a looping control structure). The variables established in <span><b>loop</b></span> are bound as if by <span><b>let</b></span> or <span><b>lambda</b></span>.</p>
|
||
<p>Implementations can interleave the setting of initial values with the <span><i>bindings</i></span>. However, the assignment of the initial values is always calculated in the order specified by the user. A variable is thus sometimes bound to a meaningless value of the correct <span><i>type</i></span>, and then later in the prologue it is set to the true initial value by using <span><b>setq</b></span>. One implication of this interleaving is that it is <span><i>implementation-dependent</i></span> whether the <span><i>lexical environment</i></span> in which the initial value <span><i>forms</i></span> (variously called the <em>form1</em>, <em>form2</em>, <em>form3</em>, <em>step-fun</em>, <span><i>vector</i></span>, <em>hash-table</em>, and <span><i>package</i></span>) in any <em>for-as-subclause</em>, except <em>for-as-equals-then</em>, are <em>evaluated</em> includes only the loop variables preceding that <span><i>form</i></span> or includes more or all of the loop variables; the <em>form1</em> and <em>form2</em> in a <em>for-as-equals-then</em> form includes the <span><i>lexical environment</i></span> of all the loop variables.</p>
|
||
<p>After the <span><i>form</i></span> is expanded, it consists of three basic parts in the <span><b>tagbody</b></span>: the loop prologue, the loop body, and the loop epilogue.</p>
|
||
<p><strong>Loop prologue</strong></p>
|
||
<p>The loop prologue contains <span><i>forms</i></span> that are executed before iteration begins, such as any automatic variable initializations prescribed by the <span><i>variable</i></span> clauses, along with any</p>
|
||
<p>initially clauses in the order they appear in the source.</p>
|
||
<p><strong>Loop body</strong></p>
|
||
<p>The loop body contains those <span><i>forms</i></span> that are executed during iteration, including application-specific calculations, termination tests, and variable <em>stepping</em><sub>1</sub>.</p>
|
||
<p><strong>Loop epilogue</strong></p>
|
||
<p>The loop epilogue contains <span><i>forms</i></span> that are executed after iteration terminates, such as finally clauses, if any, along with any implicit return value from an <em>accumulation</em> clause or an <em>termination-test</em> clause.</p>
|
||
<p>Some clauses from the source <span><i>form</i></span> contribute code only to the loop prologue; these clauses must come before other clauses that are in the main body of the <span><b>loop</b></span> form. Others contribute code only to the loop epilogue. All other clauses contribute to the final translated <span><i>form</i></span> in the same order given in the original source <span><i>form</i></span> of the <span><b>loop</b></span>.</p>
|
||
<p>Expansion of the <span><b>loop</b></span> macro produces an <span><i>implicit block</i></span> named <span><b>nil</b></span> unless named is supplied. Thus, <span><b>return-from</b></span> (and sometimes <span><b>return</b></span>) can be used to return values from <span><b>loop</b></span> or to exit <span><b>loop</b></span>.</p>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6115-summary-of-loop-clauses">6.1.1.5 Summary of Loop Clauses<a href="g-b-the-loop-facility.html#6115-summary-of-loop-clauses" class="hash-link" aria-label="Direct link to 6.1.1.5 Summary of Loop Clauses" title="Direct link to 6.1.1.5 Summary of Loop Clauses"></a></h3>
|
||
<!-- -->
|
||
<p>Loop clauses fall into one of the following categories:</p>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61151-summary-of-variable-initialization-and-stepping-clauses">6.1.1.5.1 Summary of Variable Initialization and Stepping Clauses<a href="g-b-the-loop-facility.html#61151-summary-of-variable-initialization-and-stepping-clauses" class="hash-link" aria-label="Direct link to 6.1.1.5.1 Summary of Variable Initialization and Stepping Clauses" title="Direct link to 6.1.1.5.1 Summary of Variable Initialization and Stepping Clauses"></a></h4>
|
||
<!-- -->
|
||
<p>The for and as constructs provide iteration control clauses that establish a variable to be initialized. for and as clauses can be combined with the loop keyword and to get <span><i>parallel</i></span> initialization and <em>stepping</em><sub>1</sub>. Otherwise, the initialization and <em>stepping</em><sub>1</sub> are <span><i>sequential</i></span>.</p>
|
||
<p>The with construct is similar to a single <span><b>let</b></span> clause. with clauses can be combined using the <span><i>loop keyword</i></span> and to get <span><i>parallel</i></span> initialization.</p>
|
||
<p>For more information, see Section 6.1.2 (Variable Initialization and Stepping Clauses).</p>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61152-summary-of-value-accumulation-clauses">6.1.1.5.2 Summary of Value Accumulation Clauses<a href="g-b-the-loop-facility.html#61152-summary-of-value-accumulation-clauses" class="hash-link" aria-label="Direct link to 6.1.1.5.2 Summary of Value Accumulation Clauses" title="Direct link to 6.1.1.5.2 Summary of Value Accumulation Clauses"></a></h4>
|
||
<!-- -->
|
||
<p>The collect (or collecting) construct takes one <span><i>form</i></span> in its clause and adds the value of that <span><i>form</i></span> to the end of a <span><i>list</i></span> of values. By default, the <span><i>list</i></span> of values is returned when the <span><b>loop</b></span> finishes.</p>
|
||
<p>The append (or appending) construct takes one <span><i>form</i></span> in its clause and appends the value of that <span><i>form</i></span> to the end of a <span><i>list</i></span> of values. By default, the <span><i>list</i></span> of values is returned when the <span><b>loop</b></span> finishes.</p>
|
||
<p>The nconc (or nconcing) construct is similar to the append construct, but its <span><i>list</i></span> values are concatenated as if by the function nconc. By default, the <span><i>list</i></span> of values is returned when the <span><b>loop</b></span> finishes.</p>
|
||
<p>The sum (or summing) construct takes one <span><i>form</i></span> in its clause that must evaluate to a <span><i>number</i></span> and accumulates the sum of all these <span><i>numbers</i></span>. By default, the cumulative sum is returned when the <span><b>loop</b></span> finishes.</p>
|
||
<p>The count (or counting) construct takes one <span><i>form</i></span> in its clause and counts the number of times that the <span><i>form</i></span> evaluates to <span><i>true</i></span>. By default, the count is returned when the <span><b>loop</b></span> finishes.</p>
|
||
<p>The minimize (or minimizing) construct takes one <span><i>form</i></span> in its clause and determines the minimum value obtained by evaluating that <span><i>form</i></span>. By default, the minimum value is returned when the <span><b>loop</b></span> finishes.</p>
|
||
<p>The maximize (or maximizing) construct takes one <span><i>form</i></span> in its clause and determines the maximum value obtained by evaluating that <span><i>form</i></span>. By default, the maximum value is returned when the <span><b>loop</b></span> finishes.</p>
|
||
<p>For more information, see Section 6.1.3 (Value Accumulation Clauses).</p>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61153-summary-of-termination-test-clauses">6.1.1.5.3 Summary of Termination Test Clauses<a href="g-b-the-loop-facility.html#61153-summary-of-termination-test-clauses" class="hash-link" aria-label="Direct link to 6.1.1.5.3 Summary of Termination Test Clauses" title="Direct link to 6.1.1.5.3 Summary of Termination Test Clauses"></a></h4>
|
||
<!-- -->
|
||
<p>The for and as constructs provide a termination test that is determined by the iteration control clause.</p>
|
||
<p>The repeat construct causes termination after a specified number of iterations. (It uses an internal variable to keep track of the number of iterations.)</p>
|
||
<p>The while construct takes one <span><i>form</i></span>, a <em>test</em>, and terminates the iteration if the <em>test</em> evaluates to <span><i>false</i></span>. A while clause is equivalent to the expression (if (not <em>test</em>) (loop-finish)).</p>
|
||
<p>The until construct is the inverse of while; it terminates the iteration if the <em>test</em> evaluates to any <span><i>non-nil</i></span> value. An until clause is equivalent to the expression (if <em>test</em> (loop-finish)).</p>
|
||
<p>The always construct takes one <span><i>form</i></span> and terminates the <span><b>loop</b></span> if the <span><i>form</i></span> ever evaluates to <span><i>false</i></span>; in this case, the <span><b>loop</b></span> <span><i>form</i></span> returns <span><b>nil</b></span>. Otherwise, it provides a default return value of <span><b>t</b></span>.</p>
|
||
<p>The never construct takes one <span><i>form</i></span> and terminates the <span><b>loop</b></span> if the <span><i>form</i></span> ever evaluates to <span><i>true</i></span>; in this case, the <span><b>loop</b></span> <span><i>form</i></span> returns <span><b>nil</b></span>. Otherwise, it provides a default return value of <span><b>t</b></span>.</p>
|
||
<p>The thereis construct takes one <span><i>form</i></span> and terminates the <span><b>loop</b></span> if the <span><i>form</i></span> ever evaluates to a <em>non-nil object</em>; in this case, the <span><b>loop</b></span> <span><i>form</i></span> returns that <span><i>object</i></span>. Otherwise, it provides a default return value of <span><b>nil</b></span>.</p>
|
||
<p>If multiple termination test clauses are specified, the <span><b>loop</b></span> <span><i>form</i></span> terminates if any are satisfied. For more information, see Section 6.1.4 (Termination Test Clauses).</p>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61154-summary-of-unconditional-execution-clauses">6.1.1.5.4 Summary of Unconditional Execution Clauses<a href="g-b-the-loop-facility.html#61154-summary-of-unconditional-execution-clauses" class="hash-link" aria-label="Direct link to 6.1.1.5.4 Summary of Unconditional Execution Clauses" title="Direct link to 6.1.1.5.4 Summary of Unconditional Execution Clauses"></a></h4>
|
||
<!-- -->
|
||
<p>The do (or doing) construct evaluates all <span><i>forms</i></span> in its clause.</p>
|
||
<p>The return construct takes one <span><i>form</i></span>. Any <span><i>values</i></span> returned by the <span><i>form</i></span> are immediately returned by the <span><b>loop</b></span> form. It is equivalent to the clause do (return-from <em>block-name value</em>), where <em>block-name</em> is the name specified in a named clause, or <span><b>nil</b></span> if there is no named clause.</p>
|
||
<p>For more information, see Section 6.1.5 (Unconditional Execution Clauses).</p>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61155-summary-of-conditional-execution-clauses">6.1.1.5.5 Summary of Conditional Execution Clauses<a href="g-b-the-loop-facility.html#61155-summary-of-conditional-execution-clauses" class="hash-link" aria-label="Direct link to 6.1.1.5.5 Summary of Conditional Execution Clauses" title="Direct link to 6.1.1.5.5 Summary of Conditional Execution Clauses"></a></h4>
|
||
<!-- -->
|
||
<p>The if and when constructs take one <span><i>form</i></span> as a test and a clause that is executed when the test <em>yields true</em>. The clause can be a value accumulation, unconditional, or another conditional clause; it can also be any combination of such clauses connected by the <span><b>loop</b></span> and keyword.</p>
|
||
<p>The <span><b>loop</b></span> unless construct is similar to the <span><b>loop</b></span> when construct except that it complements the test result.</p>
|
||
<p>The <span><b>loop</b></span> else construct provides an optional component of if, when, and unless clauses that is executed when an if or when test <em>yields false</em> or when an unless test <em>yields true</em>. The component is one of the clauses described under if.</p>
|
||
<p>The <span><b>loop</b></span> end construct provides an optional component to mark the end of a conditional clause. For more information, see Section 6.1.6 (Conditional Execution Clauses).</p>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61156-summary-of-miscellaneous-clauses">6.1.1.5.6 Summary of Miscellaneous Clauses<a href="g-b-the-loop-facility.html#61156-summary-of-miscellaneous-clauses" class="hash-link" aria-label="Direct link to 6.1.1.5.6 Summary of Miscellaneous Clauses" title="Direct link to 6.1.1.5.6 Summary of Miscellaneous Clauses"></a></h4>
|
||
<!-- -->
|
||
<p>The <span><b>loop</b></span> named construct gives a name for the <span><i>block</i></span> of the loop.</p>
|
||
<p>The <span><b>loop</b></span> initially construct causes its <span><i>forms</i></span> to be evaluated in the loop prologue, which precedes all <span><b>loop</b></span> code except for initial settings supplied by the constructs with, for, or as.</p>
|
||
<p>The <span><b>loop</b></span> finally construct causes its <span><i>forms</i></span> to be evaluated in the loop epilogue after normal iteration terminates.</p>
|
||
<p>For more information, see Section 6.1.7 (Miscellaneous Clauses).</p>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6116-order-of-execution">6.1.1.6 Order of Execution<a href="g-b-the-loop-facility.html#6116-order-of-execution" class="hash-link" aria-label="Direct link to 6.1.1.6 Order of Execution" title="Direct link to 6.1.1.6 Order of Execution"></a></h3>
|
||
<!-- -->
|
||
<p>With the exceptions listed below, clauses are executed in the loop body in the order in which they appear in the source. Execution is repeated until a clause terminates the <span><b>loop</b></span> or until a <span><b>return</b></span>, <span><b>go</b></span>, or <span><b>throw</b></span> form is encountered which transfers control to a point outside of the loop. The following actions are exceptions to the linear order of execution:</p>
|
||
<p><em>•</em> All variables are initialized first, regardless of where the establishing clauses appear in the source. The order of initialization follows the order of these clauses.</p>
|
||
<p><em>•</em> The code for any initially clauses is collected into one <span><b>progn</b></span> in the order in which the clauses appear in the source. The collected code is executed once in the loop prologue after any implicit variable initializations.</p>
|
||
<p><em>•</em> The code for any finally clauses is collected into one <span><b>progn</b></span> in the order in which the clauses appear in the source. The collected code is executed once in the loop epilogue before any implicit values from the accumulation clauses are returned. Explicit returns anywhere in the source, however, will exit the <span><b>loop</b></span> without executing the epilogue code.</p>
|
||
<p><em>•</em> A with clause introduces a variable <span><i>binding</i></span> and an optional initial value. The initial values are calculated in the order in which the with clauses occur.</p>
|
||
<p><em>•</em> Iteration control clauses implicitly perform the following actions:</p>
|
||
<p>– initialize variables;</p>
|
||
<p>– <span><i>step</i></span> variables, generally between each execution of the loop body;</p>
|
||
<p>– perform termination tests, generally just before the execution of the loop body.</p>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6117-destructuring">6.1.1.7 Destructuring<a href="g-b-the-loop-facility.html#6117-destructuring" class="hash-link" aria-label="Direct link to 6.1.1.7 Destructuring" title="Direct link to 6.1.1.7 Destructuring"></a></h3>
|
||
<!-- -->
|
||
<p>The <em>d-type-spec</em> argument is used for destructuring. If the <em>d-type-spec</em> argument consists solely of the <span><i>type</i></span> <span><b>fixnum</b></span>, <span><b>float</b></span>, <span><b>t</b></span>, or <span><b>nil</b></span>, the of-type keyword is optional. The of-type construct is optional in these cases to provide backwards compatibility; thus, the following two expressions are the same:</p>
|
||
<p>;;; This expression uses the old syntax for type specifiers.</p>
|
||
<p>(loop for i fixnum upfrom 3 ...)</p>
|
||
<p>;;; This expression uses the new syntax for type specifiers.</p>
|
||
<p>(loop for i of-type fixnum upfrom 3 ...)</p>
|
||
<p>;; Declare X and Y to be of type VECTOR and FIXNUM respectively.</p>
|
||
<p>(loop for (x y) of-type (vector fixnum)</p>
|
||
<p>in l do ...)</p>
|
||
<p>A <span><i>type specifier</i></span> for a destructuring pattern is a <span><i>tree</i></span> of <span><i>type specifiers</i></span> with the same shape as the <span><i>tree</i></span> of <em>variable names</em>, with the following exceptions:</p>
|
||
<p><em>•</em> When aligning the <span><i>trees</i></span>, an <span><i>atom</i></span> in the <span><i>tree</i></span> of <span><i>type specifiers</i></span> that matches a <span><i>cons</i></span> in the variable tree declares the same <span><i>type</i></span> for each variable in the subtree rooted at the <span><i>cons</i></span>.</p>
|
||
<p><em>•</em> A <span><i>cons</i></span> in the <span><i>tree</i></span> of <span><i>type specifiers</i></span> that matches an <span><i>atom</i></span> in the <span><i>tree</i></span> of <em>variable names</em> is a <em>compound type specifer</em> .</p>
|
||
<p>Destructuring allows <span><i>binding</i></span> of a set of variables to a corresponding set of values anywhere that a value can normally be bound to a single variable. During <span><b>loop</b></span> expansion, each variable in the</p>
|
||
<p>variable list is matched with the values in the values list. If there are more variables in the variable list than there are values in the values list, the remaining variables are given a value of <span><b>nil</b></span>. If there are more values than variables listed, the extra values are discarded.</p>
|
||
<p>To assign values from a list to the variables a, b, and c, the for clause could be used to bind the variable numlist to the <span><i>car</i></span> of the supplied <span><i>form</i></span>, and then another for clause could be used to bind the variables a, b, and c <span><i>sequentially</i></span>.</p>
|
||
<p>;; Collect values by using FOR constructs.</p>
|
||
<p>(loop for numlist in ’((1 2 4.0) (5 6 8.3) (8 9 10.4))</p>
|
||
<p>for a of-type integer = (first numlist)</p>
|
||
<p>and b of-type integer = (second numlist)</p>
|
||
<p>and c of-type float = (third numlist)</p>
|
||
<p>collect (list c b a))</p>
|
||
<p>→ ((4.0 2 1) (8.3 6 5) (10.4 9 8))</p>
|
||
<p>Destructuring makes this process easier by allowing the variables to be bound in each loop iteration. <span><i>Types</i></span> can be declared by using a list of <em>type-spec</em> arguments. If all the <span><i>types</i></span> are the same, a shorthand destructuring syntax can be used, as the second example illustrates.</p>
|
||
<p>;; Destructuring simplifies the process.</p>
|
||
<p>(loop for (a b c) of-type (integer integer float) in</p>
|
||
<p>’((1 2 4.0) (5 6 8.3) (8 9 10.4))</p>
|
||
<p>collect (list c b a))</p>
|
||
<p>→ ((4.0 2 1) (8.3 6 5) (10.4 9 8))</p>
|
||
<p>;; If all the types are the same, this way is even simpler.</p>
|
||
<p>(loop for (a b c) of-type float in</p>
|
||
<p>’((1.0 2.0 4.0) (5.0 6.0 8.3) (8.0 9.0 10.4))</p>
|
||
<p>collect (list c b a))</p>
|
||
<p>→ ((4.0 2.0 1.0) (8.3 6.0 5.0) (10.4 9.0 8.0))</p>
|
||
<p>If destructuring is used to declare or initialize a number of groups of variables into <span><i>types</i></span>, the <span><i>loop keyword</i></span> and can be used to simplify the process further. ;; Initialize and declare variables in parallel by using the AND construct.</p>
|
||
<p>(loop with (a b) of-type float = ’(1.0 2.0)</p>
|
||
<p>and (c d) of-type integer = ’(3 4)</p>
|
||
<p>and (e f)</p>
|
||
<p>return (list a b c d e f))</p>
|
||
<p>→ (1.0 2.0 3 4 NIL NIL)</p>
|
||
<p>If <span><b>nil</b></span> is used in a destructuring list, no variable is provided for its place.</p>
|
||
<p>(loop for (a nil b) = ’(1 2 3)</p>
|
||
<p>do (return (list a b)))</p>
|
||
<p>→ (1 3)</p>
|
||
<p>Note that <span><i>dotted lists</i></span> can specify destructuring.</p>
|
||
<p>(loop for (x . y) = ’(1 . 2)</p>
|
||
<p>do (return y))</p>
|
||
<p>→ 2</p>
|
||
<p>(loop for ((a . b) (c . d)) of-type ((float . float) (integer . integer)) in</p>
|
||
<p>’(((1.2 . 2.4) (3 . 4)) ((3.4 . 4.6) (5 . 6)))</p>
|
||
<p>collect (list a b c d))</p>
|
||
<p>→ ((1.2 2.4 3 4) (3.4 4.6 5 6))</p>
|
||
<p>An error of <span><i>type</i></span> <span><b>program-error</b></span> is signaled (at macro expansion time) if the same variable is bound twice in any variable-binding clause of a single <span><b>loop</b></span> expression. Such variables include local variables, iteration control variables, and variables found by destructuring.</p>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6118-restrictions-on-side">6.1.1.8 Restrictions on Side<a href="g-b-the-loop-facility.html#6118-restrictions-on-side" class="hash-link" aria-label="Direct link to 6.1.1.8 Restrictions on Side" title="Direct link to 6.1.1.8 Restrictions on Side"></a></h3>
|
||
<!-- -->
|
||
<p>See Section 3.6 (Traversal Rules and Side Effects).</p>
|
||
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="612-variable-initialization-and-stepping-clauses">6.1.2 Variable Initialization and Stepping Clauses<a href="g-b-the-loop-facility.html#612-variable-initialization-and-stepping-clauses" class="hash-link" aria-label="Direct link to 6.1.2 Variable Initialization and Stepping Clauses" title="Direct link to 6.1.2 Variable Initialization and Stepping Clauses"></a></h2>
|
||
<!-- -->
|
||
<!-- -->
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6121-iteration-control">6.1.2.1 Iteration Control<a href="g-b-the-loop-facility.html#6121-iteration-control" class="hash-link" aria-label="Direct link to 6.1.2.1 Iteration Control" title="Direct link to 6.1.2.1 Iteration Control"></a></h3>
|
||
<!-- -->
|
||
<p>Iteration control clauses allow direction of <span><b>loop</b></span> iteration. The <span><i>loop keywords</i></span> for and as designate iteration control clauses. Iteration control clauses differ with respect to the specification of termination tests and to the initialization and <em>stepping</em><sub>1</sub> of loop variables. Iteration clauses by themselves do not cause the Loop Facility to return values, but they can be used in conjunction with value-accumulation clauses to return values.</p>
|
||
<p>All variables are initialized in the loop prologue. A <em>variable binding</em> has <span><i>lexical scope</i></span> unless it is proclaimed <span><b>special</b></span>; thus, by default, the variable can be <em>accessed</em> only by <span><i>forms</i></span> that lie textually within the <span><b>loop</b></span>. Stepping assignments are made in the loop body before any other <span><i>forms</i></span> are evaluated in the body.</p>
|
||
<p>The variable argument in iteration control clauses can be a destructuring list. A destructuring list is a <span><i>tree</i></span> whose <em>non-nil atoms</em> are <em>variable names</em>. See Section 6.1.1.7 (Destructuring).</p>
|
||
<p>The iteration control clauses for, as, and repeat must precede any other loop clauses, except initially, with, and named, since they establish variable <span><i>bindings</i></span>. When iteration control clauses are used in a <span><b>loop</b></span>, the corresponding termination tests in the loop body are evaluated before any other loop body code is executed.</p>
|
||
<p>If multiple iteration clauses are used to control iteration, variable initialization and <em>stepping</em><sub>1</sub> occur <span><i>sequentially</i></span> by default. The and construct can be used to connect two or more iteration clauses when <em>sequential binding</em> and <em>stepping</em><sub>1</sub> are not necessary. The iteration behavior of clauses joined by and is analogous to the behavior of the macro <span><b>do</b></span> with respect to <span><b>do*</b></span>.</p>
|
||
<p>The for and as clauses iterate by using one or more local loop variables that are initialized to some value and that can be modified or <em>stepped</em> <sub>1</sub> after each iteration. For these clauses, iteration terminates when a local variable reaches some supplied value or when some other loop clause terminates iteration. At each iteration, variables can be <em>stepped</em> <sub>1</sub> by an increment or a decrement or can be assigned a new value by the evaluation of a <span><i>form</i></span>). Destructuring can be used to assign values to variables during iteration.</p>
|
||
<p>The for and as keywords are synonyms; they can be used interchangeably. There are seven syntactic formats for these constructs. In each syntactic format, the <span><i>type</i></span> of <em>var</em> can be supplied by the optional <em>type-spec</em> argument. If <em>var</em> is a destructuring list, the <span><i>type</i></span> supplied by the <em>type-spec</em> argument must appropriately match the elements of the list. By convention, for introduces new iterations and as introduces iterations that depend on a previous iteration specification.</p>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61211-the-for-as-arithmetic-subclause">6.1.2.1.1 The for-as-arithmetic-subclause<a href="g-b-the-loop-facility.html#61211-the-for-as-arithmetic-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.1 The for-as-arithmetic-subclause" title="Direct link to 6.1.2.1.1 The for-as-arithmetic-subclause"></a></h4>
|
||
<!-- -->
|
||
<p>In the <em>for-as-arithmetic</em> subclause, the for or as construct iterates from the value supplied by <em>form1</em> to the value supplied by <em>form2</em> in increments or decrements denoted by <em>form3</em>. Each expression is evaluated only once and must evaluate to a <span><i>number</i></span> . The variable <em>var</em> is bound to the value of <em>form1</em> in the first iteration and is <em>stepped</em> <sub>1</sub> by the value of <em>form3</em> in each succeeding iteration, or by 1 if <em>form3</em> is not provided. The following <span><i>loop keywords</i></span> serve as valid prepositions within this syntax. At least one of the prepositions must be used; and at most one from each line may be used in a single subclause.</p>
|
||
<p>from | downfrom | upfrom</p>
|
||
<p>to | downto | upto | below | above</p>
|
||
<p>by</p>
|
||
<p>The prepositional phrases in each subclause may appear in any order. For example, either “from x by y” or “by y from x” is permitted. However, because left-to-right order of evaluation is preserved, the effects will be different in the case of side effects. Consider:</p>
|
||
<p>(let ((x 1)) (loop for i from x by (incf x) to 10 collect i))</p>
|
||
<p>→ (1 3 5 7 9)</p>
|
||
<p>(let ((x 1)) (loop for i by (incf x) from x to 10 collect i))</p>
|
||
<p>→ (2 4 6 8 10)</p>
|
||
<p>The descriptions of the prepositions follow:</p>
|
||
<p>from</p>
|
||
<p>The <span><i>loop keyword</i></span> from specifies the value from which <em>stepping</em><sub>1</sub> begins, as supplied by <em>form1</em>. <em>Stepping</em><sub>1</sub> is incremental by default. If decremental <em>stepping</em><sub>1</sub> is desired, the preposition downto or above must be used with <em>form2</em>. For incremental <em>stepping</em><sub>1</sub>, the default from value is 0.</p>
|
||
<p>downfrom, upfrom</p>
|
||
<p>The <span><i>loop keyword</i></span> downfrom indicates that the variable <em>var</em> is decreased in decrements supplied by <em>form3</em>; the <span><i>loop keyword</i></span> upfrom indicates that <em>var</em> is increased in increments supplied by <em>form3</em>.</p>
|
||
<p>to</p>
|
||
<p>The <span><i>loop keyword</i></span> to marks the end value for <em>stepping</em><sub>1</sub> supplied in <em>form2</em>. <em>Stepping</em><sub>1</sub> is incremental by default. If decremental <em>stepping</em><sub>1</sub> is desired, the preposition downfrom must be used with <em>form1</em>, or else the preposition downto or above should be used instead of to with <em>form2</em>.</p>
|
||
<p>downto, upto</p>
|
||
<p>The <span><i>loop keyword</i></span> downto specifies decremental <em>stepping</em>; the <span><i>loop keyword</i></span> upto specifies incremental <em>stepping</em>. In both cases, the amount of change on each step is specified by <em>form3</em>, and the <span><b>loop</b></span> terminates when the variable <em>var</em> passes the value of <em>form2</em>. Since there is no default for <em>form1</em> in decremental <em>stepping</em><sub>1</sub>, a <em>form1</em> value must be supplied (using from or downfrom) when downto is supplied.</p>
|
||
<p>below, above</p>
|
||
<p>The <span><i>loop keywords</i></span> below and above are analogous to upto and downto respectively. These keywords stop iteration just before the value of the variable <em>var</em> reaches the value supplied by <em>form2</em>; the end value of <em>form2</em> is not included. Since there is no default for <em>form1</em> in decremental <em>stepping</em><sub>1</sub>, a <em>form1</em> value must be supplied (using from or downfrom) when above is supplied.</p>
|
||
<p>by</p>
|
||
<p>The <span><i>loop keyword</i></span> by marks the increment or decrement supplied by <em>form3</em>. The value of <em>form3</em> can be any positive <span><i>number</i></span> . The default value is 1.</p>
|
||
<p>In an iteration control clause, the for or as construct causes termination when the supplied limit is reached. That is, iteration continues until the value <em>var</em> is stepped to the exclusive or inclusive limit supplied by <em>form2</em>. The range is exclusive if <em>form3</em> increases or decreases <em>var</em> to the value of <em>form2</em> without reaching that value; the loop keywords below and above provide exclusive limits. An</p>
|
||
<p>inclusive limit allows <em>var</em> to attain the value of <em>form2</em>; to, downto, and upto provide inclusive limits.</p>
|
||
<h5 class="anchor anchorWithStickyNavbar_LWe7" id="612111-examples-of-for-as-arithmetic-subclause">6.1.2.1.1.1 Examples of for-as-arithmetic-subclause<a href="g-b-the-loop-facility.html#612111-examples-of-for-as-arithmetic-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.1.1 Examples of for-as-arithmetic-subclause" title="Direct link to 6.1.2.1.1.1 Examples of for-as-arithmetic-subclause"></a></h5>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">;; Print some numbers. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i from </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Print every third number. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i from </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> downto </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> by </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">7</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Step incrementally from the default starting value. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i below </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61212-the-for-as-inlist-subclause">6.1.2.1.2 The for-as-inlist-subclause<a href="g-b-the-loop-facility.html#61212-the-for-as-inlist-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.2 The for-as-inlist-subclause" title="Direct link to 6.1.2.1.2 The for-as-inlist-subclause"></a></h4>
|
||
<!-- -->
|
||
<p>In the <em>for-as-in-list</em> subclause, the for or as construct iterates over the contents of a <span><i>list</i></span>. It checks for the end of the <span><i>list</i></span> as if by using <span><b>endp</b></span>. The variable <em>var</em> is bound to the successive elements of the <span><i>list</i></span> in <em>form1</em> before each iteration. At the end of each iteration, the function <em>step-fun</em> is applied to the <span><i>list</i></span>; the default value for <em>step-fun</em> is <span><b>cdr</b></span>. The <span><i>loop keywords</i></span> in and by serve as valid prepositions in this syntax. The for or as construct causes termination when the end of the <span><i>list</i></span> is reached.</p>
|
||
<h5 class="anchor anchorWithStickyNavbar_LWe7" id="612121-examples-of-for-as-inlist-subclause">6.1.2.1.2.1 Examples of for-as-inlist-subclause<a href="g-b-the-loop-facility.html#612121-examples-of-for-as-inlist-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.2.1 Examples of for-as-inlist-subclause" title="Direct link to 6.1.2.1.2.1 Examples of for-as-inlist-subclause"></a></h5>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">;; Print every item in a list. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for item in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Print every other item in a list. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for item in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> by #’cddr </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Destructure a list, and sum the x values using fixnum arithmetic. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">item</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"> x</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> of-type </span><span class="token punctuation" style="color:#393A34">(</span><span class="token boolean" style="color:#36acaa">t</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"> fixnum</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">A</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">B</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">C</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> unless </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">eq</span><span class="token plain"> item ’B</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> sum x</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61213-the-for-as-onlist-subclause">6.1.2.1.3 The for-as-onlist-subclause<a href="g-b-the-loop-facility.html#61213-the-for-as-onlist-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.3 The for-as-onlist-subclause" title="Direct link to 6.1.2.1.3 The for-as-onlist-subclause"></a></h4>
|
||
<!-- -->
|
||
<p>In the <em>for-as-on-list</em> subclause, the for or as construct iterates over a <span><i>list</i></span>. It checks for the end of the <span><i>list</i></span> as if by using <span><b>atom</b></span>. The variable <em>var</em> is bound to the successive tails of the <span><i>list</i></span> in <em>form1</em>. At the end of each iteration, the function <em>step-fun</em> is applied to the <span><i>list</i></span>; the default value for <em>step-fun</em> is <span><b>cdr</b></span>. The <span><i>loop keywords</i></span> on and by serve as valid prepositions in this syntax. The for or as construct causes termination when the end of the <span><i>list</i></span> is reached.</p>
|
||
<h5 class="anchor anchorWithStickyNavbar_LWe7" id="612131-examples-of-for-as-onlist-subclause">6.1.2.1.3.1 Examples of for-as-onlist-subclause<a href="g-b-the-loop-facility.html#612131-examples-of-for-as-onlist-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.3.1 Examples of for-as-onlist-subclause" title="Direct link to 6.1.2.1.3.1 Examples of for-as-onlist-subclause"></a></h5>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">;; Collect successive tails of a list. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for sublist on ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">a</span><span class="token plain"> b c d</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> collect sublist</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">A</span><span class="token plain"> B C D</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">B</span><span class="token plain"> C D</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">C</span><span class="token plain"> D</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">D</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Print a list by using destructuring with the loop keyword ON. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> on ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61214-the-for-as-equalsthen-subclause">6.1.2.1.4 The for-as-equalsthen-subclause<a href="g-b-the-loop-facility.html#61214-the-for-as-equalsthen-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.4 The for-as-equalsthen-subclause" title="Direct link to 6.1.2.1.4 The for-as-equalsthen-subclause"></a></h4>
|
||
<!-- -->
|
||
<p>In the <em>for-as-equals-then</em> subclause the for or as construct initializes the variable <em>var</em> by setting it to the result of evaluating <em>form1</em> on the first iteration, then setting it to the result of evaluating <em>form2</em> on the second and subsequent iterations. If <em>form2</em> is omitted, the construct uses <em>form1</em> on the second and subsequent iterations. The <span><i>loop keywords</i></span> = and then serve as valid prepositions in this syntax. This construct does not provide any termination tests.</p>
|
||
<h5 class="anchor anchorWithStickyNavbar_LWe7" id="612141-examples-of-for-as-equalsthen-subclause">6.1.2.1.4.1 Examples of for-as-equalsthen-subclause<a href="g-b-the-loop-facility.html#612141-examples-of-for-as-equalsthen-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.4.1 Examples of for-as-equalsthen-subclause" title="Direct link to 6.1.2.1.4.1 Examples of for-as-equalsthen-subclause"></a></h5>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">;; Collect some numbers. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for item = </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> then </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">+</span><span class="token plain"> item </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> for iteration from </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> collect item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">11</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">21</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">31</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">41</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61215-the-for-as-across-subclause">6.1.2.1.5 The for-as-across-subclause<a href="g-b-the-loop-facility.html#61215-the-for-as-across-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.5 The for-as-across-subclause" title="Direct link to 6.1.2.1.5 The for-as-across-subclause"></a></h4>
|
||
<!-- -->
|
||
<p>In the <em>for-as-across</em> subclause the for or as construct binds the variable <em>var</em> to the value of each element in the array <span><i>vector</i></span>. The <span><i>loop keyword</i></span> across marks the array <span><i>vector</i></span>; across is used as a preposition in this syntax. Iteration stops when there are no more elements in the supplied <span><i>array</i></span></p>
|
||
<p>that can be referenced. Some implementations might recognize a <span><b>the</b></span> special form in the <span><i>vector</i></span> form to produce more efficient code.</p>
|
||
<h5 class="anchor anchorWithStickyNavbar_LWe7" id="612151-examples-of-for-as-across-subclause">6.1.2.1.5.1 Examples of for-as-across-subclause<a href="g-b-the-loop-facility.html#612151-examples-of-for-as-across-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.5.1 Examples of for-as-across-subclause" title="Direct link to 6.1.2.1.5.1 Examples of for-as-across-subclause"></a></h5>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for char across </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">the</span><span class="token plain"> simple-string </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">find-message</span><span class="token plain"> channel</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">write-char</span><span class="token plain"> char stream</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61216-the-for-as-hash-subclause">6.1.2.1.6 The for-as-hash-subclause<a href="g-b-the-loop-facility.html#61216-the-for-as-hash-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.6 The for-as-hash-subclause" title="Direct link to 6.1.2.1.6 The for-as-hash-subclause"></a></h4>
|
||
<!-- -->
|
||
<p>In the <em>for-as-hash</em> subclause the for or as construct iterates over the elements, keys, and values of a <em>hash-table</em>. In this syntax, a compound preposition is used to designate access to a <span><i>hash table</i></span>. The variable <em>var</em> takes on the value of each hash key or hash value in the supplied <em>hash-table</em>. The following <span><i>loop keywords</i></span> serve as valid prepositions within this syntax:</p>
|
||
<p>being</p>
|
||
<p>The keyword being introduces either the Loop schema hash-key or hash-value.</p>
|
||
<p>each, the</p>
|
||
<p>The <span><i>loop keyword</i></span> each follows the <span><i>loop keyword</i></span> being when hash-key or hash-value is used. The <span><i>loop keyword</i></span> the is used with hash-keys and hash-values only for ease of reading. This agreement isn’t required.</p>
|
||
<p>hash-key, hash-keys</p>
|
||
<p>These <span><i>loop keywords</i></span> access each key entry of the <span><i>hash table</i></span>. If the name hash-value is supplied in a using construct with one of these Loop schemas, the iteration can optionally access the keyed value. The order in which the keys are accessed is undefined; empty slots in the <span><i>hash table</i></span> are ignored.</p>
|
||
<p>hash-value, hash-values</p>
|
||
<p>These <span><i>loop keywords</i></span> access each value entry of a <span><i>hash table</i></span>. If the name hash-key is supplied in a using construct with one of these Loop schemas, the iteration can optionally access the key that corresponds to the value. The order in which the keys are accessed is undefined; empty slots in the <span><i>hash table</i></span> are ignored.</p>
|
||
<p>using</p>
|
||
<p>The <span><i>loop keyword</i></span> using introduces the optional key or the keyed value to be accessed. It allows access to the hash key if iteration is over the hash values, and the hash value if iteration is over the hash keys.</p>
|
||
<p>in, of</p>
|
||
<p>These loop prepositions introduce <em>hash-table</em>.</p>
|
||
<p>In effect</p>
|
||
<p>being <em>{<em>each <em>|</em> the</em>} {<em>hash-value <em>|</em> hash-values <em>|</em> hash-key <em>|</em> hash-keys</em>} {<em>in <em>|</em> of</em>}</em></p>
|
||
<p>is a compound preposition.</p>
|
||
<p>Iteration stops when there are no more hash keys or hash values to be referenced in the supplied <em>hash-table</em>.</p>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61217-the-for-as-package-subclause">6.1.2.1.7 The for-as-package-subclause<a href="g-b-the-loop-facility.html#61217-the-for-as-package-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.7 The for-as-package-subclause" title="Direct link to 6.1.2.1.7 The for-as-package-subclause"></a></h4>
|
||
<!-- -->
|
||
<p>In the <em>for-as-package</em> subclause the for or as construct iterates over the <span><i>symbols</i></span> in a <span><i>package</i></span>. In this syntax, a compound preposition is used to designate access to a <span><i>package</i></span>. The variable <em>var</em> takes on the value of each <span><i>symbol</i></span> in the supplied <span><i>package</i></span>. The following <span><i>loop keywords</i></span> serve as valid prepositions within this syntax:</p>
|
||
<p>being</p>
|
||
<p>The keyword being introduces either the Loop schema symbol, present-symbol, or external-symbol.</p>
|
||
<p>each, the</p>
|
||
<p>The <span><i>loop keyword</i></span> each follows the <span><i>loop keyword</i></span> being when symbol, present-symbol, or external-symbol is used. The <span><i>loop keyword</i></span> the is used with symbols, present-symbols, and external-symbols only for ease of reading. This agreement isn’t required.</p>
|
||
<p>present-symbol, present-symbols</p>
|
||
<p>These Loop schemas iterate over the <span><i>symbols</i></span> that are <span><i>present</i></span> in a <span><i>package</i></span>. The <span><i>package</i></span> to be iterated over is supplied in the same way that <span><i>package</i></span> arguments to <span><b>find-package</b></span> are supplied. If the <span><i>package</i></span> for the iteration is not supplied, the <span><i>current package</i></span> is used. If a <span><i>package</i></span> that does not exist is supplied, an error of <span><i>type</i></span> <span><b>package-error</b></span> is signaled.</p>
|
||
<p>symbol, symbols</p>
|
||
<p>These Loop schemas iterate over <span><i>symbols</i></span> that are <span><i>accessible</i></span> in a given <span><i>package</i></span>. The <span><i>package</i></span> to be iterated over is supplied in the same way that <span><i>package</i></span> arguments to <span><b>find-package</b></span> are supplied. If the <span><i>package</i></span> for the iteration is not supplied, the <span><i>current package</i></span> is used. If a <span><i>package</i></span> that does not exist is supplied, an error of <span><i>type</i></span> <span><b>package-error</b></span> is signaled.</p>
|
||
<p>external-symbol, external-symbols</p>
|
||
<p>These Loop schemas iterate over the <span><i>external symbols</i></span> of a <span><i>package</i></span>. The <span><i>package</i></span> to be iterated over is supplied in the same way that <span><i>package</i></span> arguments to <span><b>find-package</b></span> are</p>
|
||
<p>supplied. If the <span><i>package</i></span> for the iteration is not supplied, the <span><i>current package</i></span> is used. If a <span><i>package</i></span> that does not exist is supplied, an error of <span><i>type</i></span> <span><b>package-error</b></span> is signaled.</p>
|
||
<p>in, of</p>
|
||
<p>These loop prepositions introduce <span><i>package</i></span>.</p>
|
||
<p>In effect</p>
|
||
<p>being <em>{<em>each <em>|</em> the</em>} {<span><i>symbol </i></span>|</em> symbols <em>|</em> present-symbol <em>|</em> present-symbols <em>|</em> external-symbol <em>|</em> external-symbols*} {<em>in <em>|</em> of</em>}*</p>
|
||
<p>is a compound preposition.</p>
|
||
<p>Iteration stops when there are no more <span><i>symbols</i></span> to be referenced in the supplied <span><i>package</i></span>.</p>
|
||
<h5 class="anchor anchorWithStickyNavbar_LWe7" id="612171-examples-of-for-as-package-subclause">6.1.2.1.7.1 Examples of for-as-package-subclause<a href="g-b-the-loop-facility.html#612171-examples-of-for-as-package-subclause" class="hash-link" aria-label="Direct link to 6.1.2.1.7.1 Examples of for-as-package-subclause" title="Direct link to 6.1.2.1.7.1 Examples of for-as-package-subclause"></a></h5>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">\*package\* </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">make-package</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"TEST-PACKAGE-1"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">;; For effect, intern some symbols </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">read-from-string</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"(</span><span class="token string argument" style="color:#e3116c">THIS</span><span class="token string" style="color:#e3116c"> </span><span class="token string argument" style="color:#e3116c">IS</span><span class="token string" style="color:#e3116c"> </span><span class="token string argument" style="color:#e3116c">A</span><span class="token string" style="color:#e3116c"> TEST)"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">export</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">intern</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"THIS"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for x being each present-symbol of \*package\* </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> x</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ A </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ TEST </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ THIS </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ IS </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6122-local-variable-initializations">6.1.2.2 Local Variable Initializations<a href="g-b-the-loop-facility.html#6122-local-variable-initializations" class="hash-link" aria-label="Direct link to 6.1.2.2 Local Variable Initializations" title="Direct link to 6.1.2.2 Local Variable Initializations"></a></h3>
|
||
<!-- -->
|
||
<p>When a <span><b>loop</b></span> <span><i>form</i></span> is executed, the local variables are bound and are initialized to some value. These local variables exist until <span><b>loop</b></span> iteration terminates, at which point they cease to exist. Implicit variables are also established by iteration control clauses and the into preposition of accumulation clauses.</p>
|
||
<p>The with construct initializes variables that are local to a loop. The variables are initialized one time only. If the optional <em>type-spec</em> argument is supplied for the variable <em>var</em>, but there is no related expression to be evaluated, <em>var</em> is initialized to an appropriate default value for its <span><i>type</i></span>. For example, for the types <span><b>t</b></span>, <span><b>number</b></span>, and <span><b>float</b></span>, the default values are <span><b>nil</b></span>, 0, and 0.0 respectively. The consequences are undefined if a <em>type-spec</em> argument is supplied for <em>var</em> if the related expression returns a value that is not of the supplied <span><i>type</i></span>. By default, the with construct initializes variables <span><i>sequentially</i></span>; that is, one variable is assigned a value before the next expression is evaluated. However, by using the <span><i>loop keyword</i></span> and to join several with clauses, initializations can be forced to</p>
|
||
<p>occur in <span><i>parallel</i></span>; that is, all of the supplied <span><i>forms</i></span> are evaluated, and the results are bound to the respective variables simultaneously.</p>
|
||
<p><em>Sequential binding</em> is used when it is desireable for the initialization of some variables to depend on the values of previously bound variables. For example, suppose the variables a, b, and c are to be bound in sequence:</p>
|
||
<p>(loop with a = 1</p>
|
||
<p>with b = (+ a 2)</p>
|
||
<p>with c = (+ b 3)</p>
|
||
<p>return (list a b c))</p>
|
||
<p>→ (1 3 6)</p>
|
||
<p>The execution of the above <span><b>loop</b></span> is equivalent to the execution of the following code:</p>
|
||
<p>(block nil</p>
|
||
<p>(let* ((a 1)</p>
|
||
<p>(b (+ a 2))</p>
|
||
<p>(c (+ b 3)))</p>
|
||
<p>(tagbody</p>
|
||
<p>(next-loop (return (list a b c))</p>
|
||
<p>(go next-loop)</p>
|
||
<p>end-loop))))</p>
|
||
<p>If the values of previously bound variables are not needed for the initialization of other local variables, an and clause can be used to specify that the bindings are to occur in <span><i>parallel</i></span>:</p>
|
||
<p>(loop with a = 1</p>
|
||
<p>and b = 2</p>
|
||
<p>and c = 3</p>
|
||
<p>return (list a b c))</p>
|
||
<p>→ (1 2 3)</p>
|
||
<p>The execution of the above loop is equivalent to the execution of the following code:</p>
|
||
<p>(block nil</p>
|
||
<p>(let ((a 1)</p>
|
||
<p>(b 2)</p>
|
||
<p>(c 3))</p>
|
||
<p>(tagbody</p>
|
||
<p>(next-loop (return (list a b c))</p>
|
||
<p>(go next-loop)</p>
|
||
<p>end-loop))))</p>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61221-examples-of-with-clause">6.1.2.2.1 Examples of WITH clause<a href="g-b-the-loop-facility.html#61221-examples-of-with-clause" class="hash-link" aria-label="Direct link to 6.1.2.2.1 Examples of WITH clause" title="Direct link to 6.1.2.2.1 Examples of WITH clause"></a></h4>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">;; These bindings occur in sequence. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> with a = </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> with b = </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">+</span><span class="token plain"> a </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> with c = </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">+</span><span class="token plain"> b </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> return </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">list</span><span class="token plain"> a b c</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; These bindings occur in parallel. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">setq</span><span class="token plain"> a </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> b </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> with a = </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> and b = </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">+</span><span class="token plain"> a </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> and c = </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">+</span><span class="token plain"> b </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> return </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">list</span><span class="token plain"> a b c</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; This example shows a shorthand way to declare local variables </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; that are of different types. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> with </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">a</span><span class="token plain"> b c</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> of-type </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">float</span><span class="token plain"> integer float</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> return </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">format</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"~</span><span class="token string argument" style="color:#e3116c">A</span><span class="token string" style="color:#e3116c"> ~</span><span class="token string argument" style="color:#e3116c">A</span><span class="token string" style="color:#e3116c"> ~A"</span><span class="token plain"> a b c</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token string" style="color:#e3116c">"0.0 0 0.0"</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; This example shows a shorthand way to declare local variables </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; that are the same type. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> with </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">a</span><span class="token plain"> b c</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> of-type float </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> return </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">format</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"~</span><span class="token string argument" style="color:#e3116c">A</span><span class="token string" style="color:#e3116c"> ~</span><span class="token string argument" style="color:#e3116c">A</span><span class="token string" style="color:#e3116c"> ~A"</span><span class="token plain"> a b c</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token string" style="color:#e3116c">"0.0 0.0 0.0"</span><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="613-value-accumulation-clauses">6.1.3 Value Accumulation Clauses<a href="g-b-the-loop-facility.html#613-value-accumulation-clauses" class="hash-link" aria-label="Direct link to 6.1.3 Value Accumulation Clauses" title="Direct link to 6.1.3 Value Accumulation Clauses"></a></h2>
|
||
<!-- -->
|
||
<p>The constructs collect, collecting, append, appending, nconc, nconcing, count, counting, maximize, maximizing, minimize, minimizing, sum, and summing, allow values to be accumulated in a <span><b>loop</b></span>.</p>
|
||
<p>The constructs collect, collecting, append, appending, nconc, and nconcing, designate clauses that accumulate values in <span><i>lists</i></span> and return them. The constructs count, counting, maximize, maximizing, minimize, minimizing, sum, and summing designate clauses that accumulate and return numerical values.</p>
|
||
<p>During each iteration, the constructs collect and collecting collect the value of the supplied <span><i>form</i></span> into a <span><i>list</i></span>. When iteration terminates, the <span><i>list</i></span> is returned. The argument <em>var</em> is set to the <span><i>list</i></span> of collected values; if <em>var</em> is supplied, the <span><b>loop</b></span> does not return the final <span><i>list</i></span> automatically. If <em>var</em> is not supplied, it is equivalent to supplying an internal name for <em>var</em> and returning its value in a finally clause. The <em>var</em> argument is bound as if by the construct with. No mechanism is provided for declaring the <span><i>type</i></span> of <em>var</em>; it must be of <span><i>type</i></span> <span><b>list</b></span>.</p>
|
||
<p>The constructs append, appending, nconc, and nconcing are similar to collect except that the values of the supplied <span><i>form</i></span> must be <span><i>lists</i></span>.</p>
|
||
<p><em>•</em> The append keyword causes its <span><i>list</i></span> values to be concatenated into a single <span><i>list</i></span>, as if they were arguments to the <span><i>function</i></span> <span><b>append</b></span>.</p>
|
||
<p><em>•</em> The nconc keyword causes its <span><i>list</i></span> values to be concatenated into a single <span><i>list</i></span>, as if they were arguments to the <span><i>function</i></span> <span><b>nconc</b></span>.</p>
|
||
<p>The argument <em>var</em> is set to the <span><i>list</i></span> of concatenated values; if <em>var</em> is supplied, <span><b>loop</b></span> does not return the final <span><i>list</i></span> automatically. The <em>var</em> argument is bound as if by the construct with. A <span><i>type</i></span> cannot be supplied for <em>var</em>; it must be of <span><i>type</i></span> <span><b>list</b></span>. The construct nconc destructively modifies its argument <span><i>lists</i></span>.</p>
|
||
<p>The count construct counts the number of times that the supplied <span><i>form</i></span> returns <span><i>true</i></span>. The argument <em>var</em> accumulates the number of occurrences; if <em>var</em> is supplied, <span><b>loop</b></span> does not return the final count automatically. The <em>var</em> argument is bound as if by the construct with to a zero of the appropriate type. Subsequent values (including any necessary coercions) are computed as if by the function <span><b>1+</b></span>. If into <em>var</em> is used, a <span><i>type</i></span> can be supplied for <em>var</em> with the <em>type-spec</em> argument; the consequences are unspecified if a nonnumeric <span><i>type</i></span> is supplied. If there is no into variable, the optional <em>type-spec</em> argument applies to the internal variable that is keeping the count. The default <span><i>type</i></span> is <span><i>implementation-dependent</i></span>; but it must be a <span><i>supertype</i></span> of <span><i>type</i></span> <span><b>fixnum</b></span>.</p>
|
||
<p>The maximize and minimize constructs compare the value of the supplied <span><i>form</i></span> obtained during the first iteration with values obtained in successive iterations. The maximum (for maximize) or minimum (for minimize) value encountered is determined (as if by the <span><i>function</i></span> <span><b>max</b></span> for maximize and as if by the <span><i>function</i></span> <span><b>min</b></span> for minimize) and returned. If the maximize or minimize clause is never executed, the accumulated value is unspecified. The argument <em>var</em> accumulates the maximum or minimum value; if <em>var</em> is supplied, <span><b>loop</b></span> does not return the maximum or minimum automatically. The <em>var</em> argument is bound as if by the construct with. If into <em>var</em> is used, a <span><i>type</i></span> can be supplied for <em>var</em> with the <em>type-spec</em> argument; the consequences are unspecified if a nonnumeric <span><i>type</i></span> is supplied. If there is no into variable, the optional <em>type-spec</em> argument applies to the internal variable that is keeping the maximum or minimum value. The default <span><i>type</i></span> is <span><i>implementation-dependent</i></span>; but it must be a <span><i>supertype</i></span> of <span><i>type</i></span> <span><b>real</b></span>.</p>
|
||
<p>The sum construct forms a cumulative sum of the successive <span><i>primary values</i></span> of the supplied <span><i>form</i></span> at each iteration. The argument <em>var</em> is used to accumulate the sum; if <em>var</em> is supplied, <span><b>loop</b></span> does not return the final sum automatically. The <em>var</em> argument is bound as if by the construct with to a zero of the appropriate type. Subsequent values (including any necessary coercions) are computed as if by the <span><i>function</i></span> <span><b>+</b></span>. If into <em>var</em> is used, a <span><i>type</i></span> can be supplied for <em>var</em> with the <em>type-spec</em> argument; the consequences are unspecified if a nonnumeric <span><i>type</i></span> is supplied. If there is no into variable, the optional <em>type-spec</em> argument applies to the internal variable that is keeping the sum. The default <span><i>type</i></span> is <span><i>implementation-dependent</i></span>; but it must be a <span><i>supertype</i></span> of <span><i>type</i></span> <span><b>number</b></span>.</p>
|
||
<p>If into is used, the construct does not provide a default return value; however, the variable is available for use in any finally clause.</p>
|
||
<p>Certain kinds of accumulation clauses can be combined in a <span><b>loop</b></span> if their destination is the same (the result of <span><b>loop</b></span> or an into <em>var</em>) because they are considered to accumulate conceptually compatible quantities. In particular, any elements of following sets of accumulation clauses can be</p>
|
||
<p>mixed with other elements of the same set for the same destination in a <span><b>loop</b></span> <span><i>form</i></span>: <em>•</em> collect, append, nconc</p>
|
||
<p><em>•</em> sum, count</p>
|
||
<p><em>•</em> maximize, minimize</p>
|
||
<p>;; Collect every name and the kids in one list by using</p>
|
||
<p>;; COLLECT and APPEND.</p>
|
||
<p>(loop for name in ’(fred sue alice joe june)</p>
|
||
<p>for kids in ’((bob ken) () () (kris sunshine) ())</p>
|
||
<p>collect name</p>
|
||
<p>append kids)</p>
|
||
<p>→ (FRED BOB KEN SUE ALICE JOE KRIS SUNSHINE JUNE)</p>
|
||
<p>Any two clauses that do not accumulate the same <span><i>type</i></span> of <span><i>object</i></span> can coexist in a <span><b>loop</b></span> only if each clause accumulates its values into a different <span><i>variable</i></span>.</p>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6131-examples-of-collect-clause">6.1.3.1 Examples of COLLECT clause<a href="g-b-the-loop-facility.html#6131-examples-of-collect-clause" class="hash-link" aria-label="Direct link to 6.1.3.1 Examples of COLLECT clause" title="Direct link to 6.1.3.1 Examples of COLLECT clause"></a></h3>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">;; Collect all the symbols in a list. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">bird</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> turtle </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> horse cat</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">symbolp</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> collect i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">BIRD</span><span class="token plain"> TURTLE HORSE CAT</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Collect and return odd numbers. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i from </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> if </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">oddp</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> collect i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">9</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Collect items into local variable, but don’t return them. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">a</span><span class="token plain"> b c d</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> by #’cddr </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> collect i into my-list </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> finally </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> my-list</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">A</span><span class="token plain"> C</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6132-examples-of-append-and-nconc-clauses">6.1.3.2 Examples of APPEND and NCONC clauses<a href="g-b-the-loop-facility.html#6132-examples-of-append-and-nconc-clauses" class="hash-link" aria-label="Direct link to 6.1.3.2 Examples of APPEND and NCONC clauses" title="Direct link to 6.1.3.2 Examples of APPEND and NCONC clauses"></a></h3>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">;; Use APPEND to concatenate some sublists. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for x in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">a</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">b</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">c</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> append x</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">A</span><span class="token plain"> B </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">C</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; NCONC some sublists together. Note that only lists made by the ;; call to LIST are modified. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i upfrom </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> as x in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">a</span><span class="token plain"> b </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">c</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> nconc </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">evenp</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">list</span><span class="token plain"> x</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">A</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">C</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6133-examples-of-count-clause">6.1.3.3 Examples of COUNT clause<a href="g-b-the-loop-facility.html#6133-examples-of-count-clause" class="hash-link" aria-label="Direct link to 6.1.3.3 Examples of COUNT clause" title="Direct link to 6.1.3.3 Examples of COUNT clause"></a></h3>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">a</span><span class="token plain"> b </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token plain"> c </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token plain"> d e</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> count i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6134-examples-of-maximize-and-minimize-clauses">6.1.3.4 Examples of MAXIMIZE and MINIMIZE clauses<a href="g-b-the-loop-facility.html#6134-examples-of-maximize-and-minimize-clauses" class="hash-link" aria-label="Direct link to 6.1.3.4 Examples of MAXIMIZE and MINIMIZE clauses" title="Direct link to 6.1.3.4 Examples of MAXIMIZE and MINIMIZE clauses"></a></h3>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> maximize i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> minimize i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; In this example, FIXNUM applies to the internal variable that holds ;; the maximum value. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">setq</span><span class="token plain"> series ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1.2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4.3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5.7</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1.2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4.3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5.7</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for v in series </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> maximize </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">round</span><span class="token plain"> v</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> of-type fixnum</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">6</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; In this example, FIXNUM applies to the variable RESULT. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for v of-type float in series </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> minimize </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">round</span><span class="token plain"> v</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> into result of-type fixnum </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> finally </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> result</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6135-examples-of-sum-clause">6.1.3.5 Examples of SUM clause<a href="g-b-the-loop-facility.html#6135-examples-of-sum-clause" class="hash-link" aria-label="Direct link to 6.1.3.5 Examples of SUM clause" title="Direct link to 6.1.3.5 Examples of SUM clause"></a></h3>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i of-type fixnum in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> sum i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">15</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">setq</span><span class="token plain"> series ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1.2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4.3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5.7</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1.2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4.3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5.7</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for v in series </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> sum </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">\* </span><span class="token number" style="color:#36acaa">2.0</span><span class="token plain"> v</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">22.4</span><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="614-termination-test-clauses">6.1.4 Termination Test Clauses<a href="g-b-the-loop-facility.html#614-termination-test-clauses" class="hash-link" aria-label="Direct link to 6.1.4 Termination Test Clauses" title="Direct link to 6.1.4 Termination Test Clauses"></a></h2>
|
||
<!-- -->
|
||
<p>The repeat construct causes iteration to terminate after a specified number of times. The loop body executes <em>n</em> times, where <em>n</em> is the value of the expression <span><i>form</i></span>. The <span><i>form</i></span> argument is evaluated one time in the loop prologue. If the expression evaluates to 0 or to a negative <span><i>number</i></span> , the loop body is not evaluated.</p>
|
||
<p>The constructs always, never, thereis, while, until, and the macro <span><b>loop-finish</b></span> allow conditional termination of iteration within a <span><b>loop</b></span>.</p>
|
||
<p>The constructs always, never, and thereis provide specific values to be returned when a <span><b>loop</b></span> terminates. Using always, never, or thereis in a loop with value accumulation clauses that are not into causes an error of <span><i>type</i></span> <span><b>program-error</b></span> to be signaled (at macro expansion time). Since always, never, and thereis use the <span><b>return-from</b></span> <span><i>special operator</i></span> to terminate iteration, any finally clause that is supplied is not evaluated when exit occurs due to any of these constructs. In all other respects these constructs behave like the while and until constructs.</p>
|
||
<p>The always construct takes one <span><i>form</i></span> and terminates the <span><b>loop</b></span> if the <span><i>form</i></span> ever evaluates to <span><b>nil</b></span>; in this case, it returns <span><b>nil</b></span>. Otherwise, it provides a default return value of <span><b>t</b></span>. If the value of the supplied <span><i>form</i></span> is never <span><b>nil</b></span>, some other construct can terminate the iteration.</p>
|
||
<p>The never construct terminates iteration the first time that the value of the supplied <span><i>form</i></span> is <span><i>non-nil</i></span>; the <span><b>loop</b></span> returns <span><b>nil</b></span>. If the value of the supplied <span><i>form</i></span> is always <span><b>nil</b></span>, some other construct can terminate the iteration. Unless some other clause contributes a return value, the default value returned is <span><b>t</b></span>.</p>
|
||
<p>The thereis construct terminates iteration the first time that the value of the supplied <span><i>form</i></span> is <span><i>non-nil</i></span>; the <span><b>loop</b></span> returns the value of the supplied <span><i>form</i></span>. If the value of the supplied <span><i>form</i></span> is always <span><b>nil</b></span>, some other construct can terminate the iteration. Unless some other clause contributes a return value, the default value returned is <span><b>nil</b></span>.</p>
|
||
<p>There are two differences between the thereis and until constructs:</p>
|
||
<p><em>•</em> The until construct does not return a value or <span><b>nil</b></span> based on the value of the supplied <span><i>form</i></span>.</p>
|
||
<p><em>•</em> The until construct executes any finally clause. Since thereis uses the <span><b>return-from</b></span> <span><i>special operator</i></span> to terminate iteration, any finally clause that is supplied is not evaluated when exit occurs due to thereis.</p>
|
||
<p>The while construct allows iteration to continue until the supplied <span><i>form</i></span> evaluates to <span><i>false</i></span>. The supplied <span><i>form</i></span> is reevaluated at the location of the while clause.</p>
|
||
<p>The until construct is equivalent to while (not <span><i>form</i></span>)<em>. . .</em> . If the value of the supplied <span><i>form</i></span> is <span><i>non-nil</i></span>, iteration terminates.</p>
|
||
<p>Termination-test control constructs can be used anywhere within the loop body. The termination tests are used in the order in which they appear. If an until or while clause causes termination, any clauses that precede it in the source are still evaluated. If the until and while constructs cause termination, control is passed to the loop epilogue, where any finally clauses will be executed.</p>
|
||
<p>There are two differences between the never and until constructs:</p>
|
||
<p><em>•</em> The until construct does not return <span><b>t</b></span> or <span><b>nil</b></span> based on the value of the supplied <span><i>form</i></span>.</p>
|
||
<p><em>•</em> The until construct does not bypass any finally clauses. Since never uses the <span><b>return-from</b></span> <span><i>special operator</i></span> to terminate iteration, any finally clause that is supplied is not evaluated when exit occurs due to never.</p>
|
||
<p>In most cases it is not necessary to use <span><b>loop-finish</b></span> because other loop control clauses terminate the <span><b>loop</b></span>. The macro <span><b>loop-finish</b></span> is used to provide a normal exit from a nested conditional inside a <span><b>loop</b></span>. Since <span><b>loop-finish</b></span> transfers control to the loop epilogue, using <span><b>loop-finish</b></span> within a finally expression can cause infinite looping.</p>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6141-examples-of-repeat-clause">6.1.4.1 Examples of REPEAT clause<a href="g-b-the-loop-facility.html#6141-examples-of-repeat-clause" class="hash-link" aria-label="Direct link to 6.1.4.1 Examples of REPEAT clause" title="Direct link to 6.1.4.1 Examples of REPEAT clause"></a></h3>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> repeat </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">format</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">t</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"~&What </span><span class="token string argument" style="color:#e3116c">I</span><span class="token string" style="color:#e3116c"> say three times is true.~%"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ What I say three times is true. </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ What I say three times is true. </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ What I say three times is true. </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> repeat </span><span class="token number" style="color:#36acaa">-15</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">format</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">t</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"What you see is what you expect~%"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6142-examples-of-always">6.1.4.2 Examples of ALWAYS<a href="g-b-the-loop-facility.html#6142-examples-of-always" class="hash-link" aria-label="Direct link to 6.1.4.2 Examples of ALWAYS" title="Direct link to 6.1.4.2 Examples of ALWAYS"></a></h3>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">;; Make sure I is always less than 11 (two ways). </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; The FOR construct terminates these loops. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i from </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> always </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car"><</span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">11</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ T </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i from </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> never </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">></span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">11</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ T </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; If I exceeds 10 return I; otherwise, return NIL. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; The THEREIS construct terminates this loop. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i from </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> thereis </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">when</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">></span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">11</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token heading comment title" style="color:#999988;font-style:italic">;;; The FINALLY clause is not evaluated in these examples. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i from </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> always </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car"><</span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">9</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> finally </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"you won’t see this"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> never </span><span class="token boolean" style="color:#36acaa">t</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> finally </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"you won’t see this"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> thereis </span><span class="token string" style="color:#e3116c">"Here is my value"</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> finally </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"you won’t see this"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token string" style="color:#e3116c">"Here is my value"</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; The FOR construct terminates this loop, so the FINALLY clause </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; is evaluated. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i from </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> thereis </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">></span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">11</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> finally </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">prin1</span><span class="token plain"> ’got-here</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ GOT-HERE </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; If this code could be used to find a counterexample to Fermat’s </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; last theorem, it would still not return the value of the </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; counterexample because all of the THEREIS clauses in this example </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; only return T. But if Fermat is right, that won’t matter </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; because this won’t terminate. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for z upfrom </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> thereis </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for n upfrom </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> below </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">log</span><span class="token plain"> z </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> thereis </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for x below z </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> thereis </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for y below z </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> thereis </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">+</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">expt</span><span class="token plain"> x n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">expt</span><span class="token plain"> y n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">expt</span><span class="token plain"> z n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6143-examples-of-while-and-until-clauses">6.1.4.3 Examples of WHILE and UNTIL clauses<a href="g-b-the-loop-facility.html#6143-examples-of-while-and-until-clauses" class="hash-link" aria-label="Direct link to 6.1.4.3 Examples of WHILE and UNTIL clauses" title="Direct link to 6.1.4.3 Examples of WHILE and UNTIL clauses"></a></h3>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> while </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">hungry-p</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">eat</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; UNTIL NOT is equivalent to WHILE. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> until </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">not</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">hungry-p</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">eat</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Collect the length and the items of STACK. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">stack</span><span class="token plain"> ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">a</span><span class="token plain"> b c d e f</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for item = </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">length</span><span class="token plain"> stack</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> then </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">pop</span><span class="token plain"> stack</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> collect item </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> while stack</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">6</span><span class="token plain"> A B C D E F</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Use WHILE to terminate a loop that otherwise wouldn’t terminate. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Note that WHILE occurs after the WHEN. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i fixnum from </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">oddp</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> collect i </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> while </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car"><</span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="615-unconditional-execution-clauses">6.1.5 Unconditional Execution Clauses<a href="g-b-the-loop-facility.html#615-unconditional-execution-clauses" class="hash-link" aria-label="Direct link to 6.1.5 Unconditional Execution Clauses" title="Direct link to 6.1.5 Unconditional Execution Clauses"></a></h2>
|
||
<!-- -->
|
||
<p>The do and doing constructs evaluate the supplied <span><i>forms</i></span> wherever they occur in the expanded form of <span><b>loop</b></span>. The <span><i>form</i></span> argument can be any <span><i>compound form</i></span>. Each <span><i>form</i></span> is evaluated in every iteration. Because every loop clause must begin with a <span><i>loop keyword</i></span>, the keyword do is used when no control action other than execution is required.</p>
|
||
<p>The return construct takes one <span><i>form</i></span>. Any <span><i>values</i></span> returned by the <span><i>form</i></span> are immediately returned by the <span><b>loop</b></span> form. It is equivalent to the clause do (return-from <em>block-name value</em>), where <em>block-name</em> is the name specified in a named clause, or <span><b>nil</b></span> if there is no named clause.</p>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6151-examples-of-unconditional-execution">6.1.5.1 Examples of unconditional execution<a href="g-b-the-loop-facility.html#6151-examples-of-unconditional-execution" class="hash-link" aria-label="Direct link to 6.1.5.1 Examples of unconditional execution" title="Direct link to 6.1.5.1 Examples of unconditional execution"></a></h3>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">;; Print numbers and their squares. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; The DO construct applies to multiple forms. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i from </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">\* i i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">9</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="616-conditional-execution-clauses">6.1.6 Conditional Execution Clauses<a href="g-b-the-loop-facility.html#616-conditional-execution-clauses" class="hash-link" aria-label="Direct link to 6.1.6 Conditional Execution Clauses" title="Direct link to 6.1.6 Conditional Execution Clauses"></a></h2>
|
||
<!-- -->
|
||
<p>The if, when, and unless constructs establish conditional control in a <span><b>loop</b></span>. If the test passes, the succeeding loop clause is executed. If the test does not pass, the succeeding clause is skipped, and program control moves to the clause that follows the <span><i>loop keyword</i></span> else. If the test does not pass and no else clause is supplied, control is transferred to the clause or construct following the entire</p>
|
||
<p>conditional clause.</p>
|
||
<p>If conditional clauses are nested, each else is paired with the closest preceding conditional clause that has no associated else or end.</p>
|
||
<p>In the if and when clauses, which are synonymous, the test passes if the value of <span><i>form</i></span> is <span><i>true</i></span>. In the unless clause, the test passes if the value of <span><i>form</i></span> is <span><i>false</i></span>.</p>
|
||
<p>Clauses that follow the test expression can be grouped by using the <span><i>loop keyword</i></span> and to produce a conditional block consisting of a compound clause.</p>
|
||
<p>The <span><i>loop keyword</i></span> it can be used to refer to the result of the test expression in a clause. Use the <span><i>loop keyword</i></span> it in place of the form in a return clause or an <em>accumulation</em> clause that is inside a conditional execution clause. If multiple clauses are connected with and, the it construct must be in the first clause in the block.</p>
|
||
<p>The optional <span><i>loop keyword</i></span> end marks the end of the clause. If this keyword is not supplied, the next <span><i>loop keyword</i></span> marks the end. The construct end can be used to distinguish the scoping of compound clauses.</p>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6161-examples-of-when-clause">6.1.6.1 Examples of WHEN clause<a href="g-b-the-loop-facility.html#6161-examples-of-when-clause" class="hash-link" aria-label="Direct link to 6.1.6.1 Examples of WHEN clause" title="Direct link to 6.1.6.1 Examples of WHEN clause"></a></h3>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">;; Signal an exceptional condition. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for item in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> a </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">not</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">numberp</span><span class="token plain"> item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> return </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">cerror</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"enter new value"</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"non-numeric value: ~s"</span><span class="token plain"> item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> Error: non-numeric value: A </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; The previous example is equivalent to the following one. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for item in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> a </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">not</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">numberp</span><span class="token plain"> item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">cerror</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Enter new value"</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"non-numeric value: ~s"</span><span class="token plain"> item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Error: non-numeric value: A </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; This example parses a simple printed string representation from ;; BUFFER (which is itself a string) and returns the index of the ;; closing double-quote character. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">buffer</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"\"a\" \"b\""</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> initially </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">unless</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">char=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">char</span><span class="token plain"> buffer </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> #\"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop-finish</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> for i of-type fixnum from </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> below </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">length</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">the</span><span class="token plain"> string buffer</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">char=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">char</span><span class="token plain"> buffer i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> #\"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> return i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; The collected value is returned. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i from </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">></span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> collect i </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> finally </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">prin1</span><span class="token plain"> ’got-here</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ GOT-HERE </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">6</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">8</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">9</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Return both the count of collected numbers and the numbers. (loop for i from 1 to 10 </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">></span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">collect i into number-list </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">and count i into number-count </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">finally </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">values</span><span class="token plain"> number-count number-list</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ 5, </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">6</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">8</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">9</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="617-miscellaneous-clauses">6.1.7 Miscellaneous Clauses<a href="g-b-the-loop-facility.html#617-miscellaneous-clauses" class="hash-link" aria-label="Direct link to 6.1.7 Miscellaneous Clauses" title="Direct link to 6.1.7 Miscellaneous Clauses"></a></h2>
|
||
<!-- -->
|
||
<!-- -->
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6171-control-transfer-clauses">6.1.7.1 Control Transfer Clauses<a href="g-b-the-loop-facility.html#6171-control-transfer-clauses" class="hash-link" aria-label="Direct link to 6.1.7.1 Control Transfer Clauses" title="Direct link to 6.1.7.1 Control Transfer Clauses"></a></h3>
|
||
<!-- -->
|
||
<p>The named construct establishes a name for an <span><i>implicit block</i></span> surrounding the entire <span><b>loop</b></span> so that the <span><b>return-from</b></span> <span><i>special operator</i></span> can be used to return values from or to exit <span><b>loop</b></span>. Only one name per <span><b>loop</b></span> <span><i>form</i></span> can be assigned. If used, the named construct must be the first clause in the loop expression.</p>
|
||
<p>The return construct takes one <span><i>form</i></span>. Any <span><i>values</i></span> returned by the <span><i>form</i></span> are immediately returned by the <span><b>loop</b></span> form. This construct is similar to the <span><b>return-from</b></span> <span><i>special operator</i></span> and the <span><b>return</b></span> <span><i>macro</i></span>. The return construct does not execute any finally clause that the <span><b>loop</b></span> <span><i>form</i></span> is given.</p>
|
||
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="61711-examples-of-named-clause">6.1.7.1.1 Examples of NAMED clause<a href="g-b-the-loop-facility.html#61711-examples-of-named-clause" class="hash-link" aria-label="Direct link to 6.1.7.1.1 Examples of NAMED clause" title="Direct link to 6.1.7.1.1 Examples of NAMED clause"></a></h4>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">;; Just name and return. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> named max </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> for i from </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">return-from</span><span class="token plain"> max ’done</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ DONE </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6172-initial-and-final-execution">6.1.7.2 Initial and Final Execution<a href="g-b-the-loop-facility.html#6172-initial-and-final-execution" class="hash-link" aria-label="Direct link to 6.1.7.2 Initial and Final Execution" title="Direct link to 6.1.7.2 Initial and Final Execution"></a></h3>
|
||
<!-- -->
|
||
<p>The initially and finally constructs evaluate forms that occur before and after the loop body.</p>
|
||
<p>The initially construct causes the supplied <em>compound-forms</em> to be evaluated in the loop prologue, which precedes all loop code except for initial settings supplied by constructs with, for, or as. The code for any initially clauses is executed in the order in which the clauses appeared in the <span><b>loop</b></span>.</p>
|
||
<p>The finally construct causes the supplied <em>compound-forms</em> to be evaluated in the loop epilogue after normal iteration terminates. The code for any finally clauses is executed in the order in which the clauses appeared in the <span><b>loop</b></span>. The collected code is executed once in the loop epilogue before any implicit values are returned from the accumulation clauses. An explicit transfer of control (<em>e.g.</em>, by <span><b>return</b></span>, <span><b>go</b></span>, or <span><b>throw</b></span>) from the loop body, however, will exit the <span><b>loop</b></span> without executing the epilogue code.</p>
|
||
<p>Clauses such as return, always, never, and thereis can bypass the finally clause. <span><b>return</b></span> (or <span><b>return-from</b></span>, if the named option was supplied) can be used after finally to return values from a <span><b>loop</b></span>. Such an <span><i>explicit return</i></span> inside the finally clause takes precedence over returning the accumulation from clauses supplied by such keywords as collect, nconc, append, sum, count, maximize, and minimize; the accumulation values for these preempted clauses are not returned by <span><b>loop</b></span> if <span><b>return</b></span> or <span><b>return-from</b></span> is used.</p>
|
||
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="618-examples-of-miscellaneous-loop-features">6.1.8 Examples of Miscellaneous Loop Features<a href="g-b-the-loop-facility.html#618-examples-of-miscellaneous-loop-features" class="hash-link" aria-label="Direct link to 6.1.8 Examples of Miscellaneous Loop Features" title="Direct link to 6.1.8 Examples of Miscellaneous Loop Features"></a></h2>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">i</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">; no loop keywords are used </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">incf</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">=</span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> → </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">i</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">j</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">tagbody</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">incf</span><span class="token plain"> j </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">incf</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">=</span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">go</span><span class="token plain"> exit</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> exit</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> j</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> → </span><span class="token number" style="color:#36acaa">9</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">In the following example, the variable x is stepped before y is stepped</span><span class="token comment" style="color:#999988;font-style:italic">; thus, the value of y reflects the updated value of x: </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for x from </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> for y = </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token plain"> then x </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> collect </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">list</span><span class="token plain"> x y</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> NIL</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">6</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">7</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">8</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">8</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">9</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">9</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">In this example, x and y are stepped in *parallel*: </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for x from </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> and y = </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token plain"> then x </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> collect </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">list</span><span class="token plain"> x y</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> NIL</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">6</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">7</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">8</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">9</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">8</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">9</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="6181-examples-of-clause-grouping">6.1.8.1 Examples of clause grouping<a href="g-b-the-loop-facility.html#6181-examples-of-clause-grouping" class="hash-link" aria-label="Direct link to 6.1.8.1 Examples of clause grouping" title="Direct link to 6.1.8.1 Examples of clause grouping"></a></h3>
|
||
<!-- -->
|
||
<div class="language-lisp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lisp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">;; Group conditional clauses. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">324</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2345</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">323</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">235</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">252</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">oddp</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> and collect i into odd-numbers </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> and do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">terpri</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> else </span><span class="token comment" style="color:#999988;font-style:italic">; I is even. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> collect i into even-numbers </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> finally </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">values</span><span class="token plain"> odd-numbers even-numbers</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">2345</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">323</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">235</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2345</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">323</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">235</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">, </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">324</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">252</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Collect numbers larger than 3. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">and</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">></span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> collect it</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">; IT refers to (and (> i 3) i). </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Find a number in a list. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">and</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">></span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> return it</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; The above example is similar to the following one. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i in ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> thereis </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">and</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">></span><span class="token plain"> i </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Nest conditional clauses. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">list</span><span class="token plain"> ’</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3.0</span><span class="token plain"> apple </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">9.8</span><span class="token plain"> orange banana</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for i in list </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">numberp</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">floatp</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> collect i into float-numbers </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> else </span><span class="token comment" style="color:#999988;font-style:italic">; Not (floatp i) </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> collect i into other-numbers </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> else </span><span class="token comment" style="color:#999988;font-style:italic">; Not (numberp i) </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> when </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">symbolp</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> collect i into symbol-list </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> else </span><span class="token comment" style="color:#999988;font-style:italic">; Not (symbolp i) </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">error</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"found a funny value in list ~</span><span class="token string argument" style="color:#e3116c">S</span><span class="token string" style="color:#e3116c">, value ~S~%"</span><span class="token plain"> list i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> finally </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">values</span><span class="token plain"> float-numbers other-numbers symbol-list</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">3.0</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">9.8</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">, </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">, </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">APPLE</span><span class="token plain"> ORANGE BANANA</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; Without the END preposition, the last AND would apply to the </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">;; inner IF rather than the outer one. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">loop</span><span class="token plain"> for x from </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> to </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">print</span><span class="token plain"> x</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> if </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">zerop</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">mod</span><span class="token plain"> x </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">princ</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">" a"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> and if </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">zerop</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">floor</span><span class="token plain"> x </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">princ</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">" b"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> end </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> and do </span><span class="token punctuation" style="color:#393A34">(</span><span class="token car">princ</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">" c"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> a b c </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> a c </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">▷ </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">→ NIL </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
|
||
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="619-notes-about-loop">6.1.9 Notes about Loop<a href="g-b-the-loop-facility.html#619-notes-about-loop" class="hash-link" aria-label="Direct link to 6.1.9 Notes about Loop" title="Direct link to 6.1.9 Notes about Loop"></a></h2>
|
||
<!-- -->
|
||
<!-- -->
|
||
<p><span><i>Types</i></span> can be supplied for loop variables. It is not necessary to supply a <span><i>type</i></span> for any variable, but supplying the <span><i>type</i></span> can ensure that the variable has a correctly typed initial value, and it can also enable compiler optimizations (depending on the <span><i>implementation</i></span>).</p>
|
||
<p>The clause repeat <em>n</em> ... is roughly equivalent to a clause such as</p>
|
||
<p>(loop for <em>internal-variable</em> downfrom (- <em>n</em> 1) to 0 ...)</p>
|
||
<p>but in some <span><i>implementations</i></span>, the repeat construct might be more efficient.</p>
|
||
<p>Within the executable parts of the loop clauses and around the entire <span><b>loop</b></span> form, variables can be bound by using <span><b>let</b></span>.</p>
|
||
<p>Use caution when using a variable named IT (in any <span><i>package</i></span>) in connection with <span><b>loop</b></span>, since it is a <span><i>loop keyword</i></span> that can be used in place of a <span><i>form</i></span> in certain contexts.</p>
|
||
<p>There is no <span><i>standardized</i></span> mechanism for users to add extensions to <span><b>loop</b></span>.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/lisp-docs/cl-language-reference/tree/main/docs/chap-6/g-b-the-loop-facility.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"><span class="theme-last-updated">Last updated<!-- --> by <b>daninus14</b></span></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="../chap-5/f-d-dictionary/when_unless_macro.html"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">when, unless</div></a><a class="pagination-nav__link pagination-nav__link--next" href="../category/62-iteration-dictionary.html"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">6.2 Iteration Dictionary</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="g-b-the-loop-facility.html#611-overview-of-the-loop-facility" class="table-of-contents__link toc-highlight">6.1.1 Overview of the Loop Facility</a><ul><li><a href="g-b-the-loop-facility.html#6111-simple-vs-extended-loop" class="table-of-contents__link toc-highlight">6.1.1.1 Simple vs Extended Loop</a><ul><li><a href="g-b-the-loop-facility.html#61111-simple-loop" class="table-of-contents__link toc-highlight">6.1.1.1.1 Simple Loop</a></li><li><a href="g-b-the-loop-facility.html#61112-extended-loop" class="table-of-contents__link toc-highlight">6.1.1.1.2 Extended Loop</a></li></ul></li><li><a href="g-b-the-loop-facility.html#6112-loop-keywords" class="table-of-contents__link toc-highlight">6.1.1.2 Loop Keywords</a></li><li><a href="g-b-the-loop-facility.html#6113-parsing-loop-clauses" class="table-of-contents__link toc-highlight">6.1.1.3 Parsing Loop Clauses</a></li><li><a href="g-b-the-loop-facility.html#6114-expanding-loop-forms" class="table-of-contents__link toc-highlight">6.1.1.4 Expanding Loop Forms</a></li><li><a href="g-b-the-loop-facility.html#6115-summary-of-loop-clauses" class="table-of-contents__link toc-highlight">6.1.1.5 Summary of Loop Clauses</a><ul><li><a href="g-b-the-loop-facility.html#61151-summary-of-variable-initialization-and-stepping-clauses" class="table-of-contents__link toc-highlight">6.1.1.5.1 Summary of Variable Initialization and Stepping Clauses</a></li><li><a href="g-b-the-loop-facility.html#61152-summary-of-value-accumulation-clauses" class="table-of-contents__link toc-highlight">6.1.1.5.2 Summary of Value Accumulation Clauses</a></li><li><a href="g-b-the-loop-facility.html#61153-summary-of-termination-test-clauses" class="table-of-contents__link toc-highlight">6.1.1.5.3 Summary of Termination Test Clauses</a></li><li><a href="g-b-the-loop-facility.html#61154-summary-of-unconditional-execution-clauses" class="table-of-contents__link toc-highlight">6.1.1.5.4 Summary of Unconditional Execution Clauses</a></li><li><a href="g-b-the-loop-facility.html#61155-summary-of-conditional-execution-clauses" class="table-of-contents__link toc-highlight">6.1.1.5.5 Summary of Conditional Execution Clauses</a></li><li><a href="g-b-the-loop-facility.html#61156-summary-of-miscellaneous-clauses" class="table-of-contents__link toc-highlight">6.1.1.5.6 Summary of Miscellaneous Clauses</a></li></ul></li><li><a href="g-b-the-loop-facility.html#6116-order-of-execution" class="table-of-contents__link toc-highlight">6.1.1.6 Order of Execution</a></li><li><a href="g-b-the-loop-facility.html#6117-destructuring" class="table-of-contents__link toc-highlight">6.1.1.7 Destructuring</a></li><li><a href="g-b-the-loop-facility.html#6118-restrictions-on-side" class="table-of-contents__link toc-highlight">6.1.1.8 Restrictions on Side</a></li></ul></li><li><a href="g-b-the-loop-facility.html#612-variable-initialization-and-stepping-clauses" class="table-of-contents__link toc-highlight">6.1.2 Variable Initialization and Stepping Clauses</a><ul><li><a href="g-b-the-loop-facility.html#6121-iteration-control" class="table-of-contents__link toc-highlight">6.1.2.1 Iteration Control</a><ul><li><a href="g-b-the-loop-facility.html#61211-the-for-as-arithmetic-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.1 The for-as-arithmetic-subclause</a><ul><li><a href="g-b-the-loop-facility.html#612111-examples-of-for-as-arithmetic-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.1.1 Examples of for-as-arithmetic-subclause</a></li></ul></li><li><a href="g-b-the-loop-facility.html#61212-the-for-as-inlist-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.2 The for-as-inlist-subclause</a><ul><li><a href="g-b-the-loop-facility.html#612121-examples-of-for-as-inlist-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.2.1 Examples of for-as-inlist-subclause</a></li></ul></li><li><a href="g-b-the-loop-facility.html#61213-the-for-as-onlist-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.3 The for-as-onlist-subclause</a><ul><li><a href="g-b-the-loop-facility.html#612131-examples-of-for-as-onlist-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.3.1 Examples of for-as-onlist-subclause</a></li></ul></li><li><a href="g-b-the-loop-facility.html#61214-the-for-as-equalsthen-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.4 The for-as-equalsthen-subclause</a><ul><li><a href="g-b-the-loop-facility.html#612141-examples-of-for-as-equalsthen-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.4.1 Examples of for-as-equalsthen-subclause</a></li></ul></li><li><a href="g-b-the-loop-facility.html#61215-the-for-as-across-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.5 The for-as-across-subclause</a><ul><li><a href="g-b-the-loop-facility.html#612151-examples-of-for-as-across-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.5.1 Examples of for-as-across-subclause</a></li></ul></li><li><a href="g-b-the-loop-facility.html#61216-the-for-as-hash-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.6 The for-as-hash-subclause</a></li><li><a href="g-b-the-loop-facility.html#61217-the-for-as-package-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.7 The for-as-package-subclause</a><ul><li><a href="g-b-the-loop-facility.html#612171-examples-of-for-as-package-subclause" class="table-of-contents__link toc-highlight">6.1.2.1.7.1 Examples of for-as-package-subclause</a></li></ul></li></ul></li><li><a href="g-b-the-loop-facility.html#6122-local-variable-initializations" class="table-of-contents__link toc-highlight">6.1.2.2 Local Variable Initializations</a><ul><li><a href="g-b-the-loop-facility.html#61221-examples-of-with-clause" class="table-of-contents__link toc-highlight">6.1.2.2.1 Examples of WITH clause</a></li></ul></li></ul></li><li><a href="g-b-the-loop-facility.html#613-value-accumulation-clauses" class="table-of-contents__link toc-highlight">6.1.3 Value Accumulation Clauses</a><ul><li><a href="g-b-the-loop-facility.html#6131-examples-of-collect-clause" class="table-of-contents__link toc-highlight">6.1.3.1 Examples of COLLECT clause</a></li><li><a href="g-b-the-loop-facility.html#6132-examples-of-append-and-nconc-clauses" class="table-of-contents__link toc-highlight">6.1.3.2 Examples of APPEND and NCONC clauses</a></li><li><a href="g-b-the-loop-facility.html#6133-examples-of-count-clause" class="table-of-contents__link toc-highlight">6.1.3.3 Examples of COUNT clause</a></li><li><a href="g-b-the-loop-facility.html#6134-examples-of-maximize-and-minimize-clauses" class="table-of-contents__link toc-highlight">6.1.3.4 Examples of MAXIMIZE and MINIMIZE clauses</a></li><li><a href="g-b-the-loop-facility.html#6135-examples-of-sum-clause" class="table-of-contents__link toc-highlight">6.1.3.5 Examples of SUM clause</a></li></ul></li><li><a href="g-b-the-loop-facility.html#614-termination-test-clauses" class="table-of-contents__link toc-highlight">6.1.4 Termination Test Clauses</a><ul><li><a href="g-b-the-loop-facility.html#6141-examples-of-repeat-clause" class="table-of-contents__link toc-highlight">6.1.4.1 Examples of REPEAT clause</a></li><li><a href="g-b-the-loop-facility.html#6142-examples-of-always" class="table-of-contents__link toc-highlight">6.1.4.2 Examples of ALWAYS</a></li><li><a href="g-b-the-loop-facility.html#6143-examples-of-while-and-until-clauses" class="table-of-contents__link toc-highlight">6.1.4.3 Examples of WHILE and UNTIL clauses</a></li></ul></li><li><a href="g-b-the-loop-facility.html#615-unconditional-execution-clauses" class="table-of-contents__link toc-highlight">6.1.5 Unconditional Execution Clauses</a><ul><li><a href="g-b-the-loop-facility.html#6151-examples-of-unconditional-execution" class="table-of-contents__link toc-highlight">6.1.5.1 Examples of unconditional execution</a></li></ul></li><li><a href="g-b-the-loop-facility.html#616-conditional-execution-clauses" class="table-of-contents__link toc-highlight">6.1.6 Conditional Execution Clauses</a><ul><li><a href="g-b-the-loop-facility.html#6161-examples-of-when-clause" class="table-of-contents__link toc-highlight">6.1.6.1 Examples of WHEN clause</a></li></ul></li><li><a href="g-b-the-loop-facility.html#617-miscellaneous-clauses" class="table-of-contents__link toc-highlight">6.1.7 Miscellaneous Clauses</a><ul><li><a href="g-b-the-loop-facility.html#6171-control-transfer-clauses" class="table-of-contents__link toc-highlight">6.1.7.1 Control Transfer Clauses</a><ul><li><a href="g-b-the-loop-facility.html#61711-examples-of-named-clause" class="table-of-contents__link toc-highlight">6.1.7.1.1 Examples of NAMED clause</a></li></ul></li><li><a href="g-b-the-loop-facility.html#6172-initial-and-final-execution" class="table-of-contents__link toc-highlight">6.1.7.2 Initial and Final Execution</a></li></ul></li><li><a href="g-b-the-loop-facility.html#618-examples-of-miscellaneous-loop-features" class="table-of-contents__link toc-highlight">6.1.8 Examples of Miscellaneous Loop Features</a><ul><li><a href="g-b-the-loop-facility.html#6181-examples-of-clause-grouping" class="table-of-contents__link toc-highlight">6.1.8.1 Examples of clause grouping</a></li></ul></li><li><a href="g-b-the-loop-facility.html#619-notes-about-loop" class="table-of-contents__link toc-highlight">6.1.9 Notes about Loop</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a href="../../docs/tutorial.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Common Lisp Tutorial</a></li><li class="footer__item"><a href="../index.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Common Lisp Technical Reference</a></li><li class="footer__item"><a href="../../docs/help.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Help</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://stackoverflow.com/questions/tagged/common-lisp" target="_blank" rel="noopener noreferrer" class="footer__link-item">Stack Overflow<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://discord.gg/hhk46CE" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.reddit.com/r/common_lisp" target="_blank" rel="noopener noreferrer" class="footer__link-item">Reddit<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://irclog.tymoon.eu/libera/commonlisp" target="_blank" rel="noopener noreferrer" class="footer__link-item">IRC<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="../../blog.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog</a></li><li class="footer__item"><a href="https://github.com/lisp-docs/lisp-docs.github.io" target="_blank" rel="noopener noreferrer" class="footer__link-item">Tutorial and General Content GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/lisp-docs/cl-language-reference/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Technical Reference GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="../../docs/contribute.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Contribute to the Docs</a></li></ul></div><div class="col footer__col"><div class="footer__title">Common Lisp Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a href="../../docs/about.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">About</a></li><li class="footer__item"><a href="../../docs/whylisp.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Why Lisp</a></li><li class="footer__item"><a href="../../docs/getting-started.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Getting Started</a></li><li class="footer__item"><a href="../../docs/faq.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">FAQ</a></li><li class="footer__item"><a href="../../docs/help.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Getting Help</a></li><li class="footer__item"><a href="../../docs/howto.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">How To Guides</a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Common Lisp Docs, MIT License (see GitHub Repo).</div></div></div></footer></div>
|
||
</body>
|
||
</html> |