<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ale is a Lisp Environment</title>
    <link>https://www.ale-lang.org/</link>
    <description>Recent content on Ale is a Lisp Environment</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 21 Aug 2024 18:10:19 +0200</lastBuildDate>
    <atom:link href="https://www.ale-lang.org/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Ale Assembler</title>
      <link>https://www.ale-lang.org/assembler/</link>
      <pubDate>Wed, 21 Aug 2024 18:10:19 +0200</pubDate>
      <guid>https://www.ale-lang.org/assembler/</guid>
      <description>&lt;p&gt;Ale is a dialect of &lt;a href=&#34;https://en.wikipedia.org/wiki/Lisp_(programming_language)&#34;&gt;Lisp&lt;/a&gt; which means that it&amp;rsquo;s infinitely extensible out of the box. Hygienic macros and syntax quoting make this possible. But what if you really, &lt;em&gt;really&lt;/em&gt; need to start making deep changes? Like at the compiler level? Well, I&amp;rsquo;ve designed that to be a relatively straight-forward process as well!&lt;/p&gt;&#xA;&lt;p&gt;From the Ale REPL, type the word &lt;code&gt;if&lt;/code&gt; (no parens) and you&amp;rsquo;ll see something like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;{:instance &amp;quot;0x51a160&amp;quot; :type special}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is the string representation of Ale&amp;rsquo;s &lt;code&gt;if&lt;/code&gt; special form. Other forms will present themselves differently. For example, &lt;code&gt;lazy-seq&lt;/code&gt; has a type of &lt;em&gt;&amp;ldquo;macro&amp;rdquo;&lt;/em&gt;, while &lt;code&gt;first&lt;/code&gt; is a lambda and has a type of &lt;em&gt;&amp;ldquo;procedure&amp;rdquo;&lt;/em&gt;. But what&amp;rsquo;s this &lt;em&gt;&amp;ldquo;special&amp;rdquo;&lt;/em&gt; stuff?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go and Ale</title>
      <link>https://www.ale-lang.org/ffi/</link>
      <pubDate>Fri, 12 Feb 2021 07:20:10 +0200</pubDate>
      <guid>https://www.ale-lang.org/ffi/</guid>
      <description>&lt;p&gt;Ale is designed to be hosted within a &lt;a href=&#34;https://golang.org/&#34;&gt;Go&lt;/a&gt; process. And&#xA;while it&amp;rsquo;s not particularly difficult to &lt;a href=&#34;../embedding&#34;&gt;embed&lt;/a&gt; or even&#xA;&lt;a href=&#34;../extending&#34;&gt;extend&lt;/a&gt; Ale, getting data structures from Go into Ale (and vice&#xA;versa) has historically been a high-friction activity. There&amp;rsquo;s a reason for this&#xA;and it all comes down to equality.&lt;/p&gt;&#xA;&lt;h3 id=&#34;equality-in-ale--equality-in-go&#34;&gt;Equality in Ale ≠ Equality in Go&lt;/h3&gt;&#xA;&lt;p&gt;Ale employs what&amp;rsquo;s called &amp;ldquo;structural equality.&amp;rdquo; This means that for any value,&#xA;even if it&amp;rsquo;s not the same instance of a value, Ale will dive into its content to&#xA;check whether or not it contains the same stuff. For example:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ale Language Design</title>
      <link>https://www.ale-lang.org/design/</link>
      <pubDate>Fri, 08 May 2020 13:08:12 +0200</pubDate>
      <guid>https://www.ale-lang.org/design/</guid>
      <description>&lt;p&gt;Ale is a Lisp dialect that takes syntactic cues from both Scheme and Clojure.&lt;/p&gt;&#xA;&lt;p&gt;Where Scheme treats parentheses and square brackets as being one in the same. Ale treats them the way that Clojure does &amp;ndash; meaning parentheses are used to delimit lists, while square brackets are used to delimit vectors. Ale takes advantage of this by incorporating the syntactic difference into its language design, a move that (hopefully) improves consistency and readability.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Metaprogramming Ale</title>
      <link>https://www.ale-lang.org/macros/</link>
      <pubDate>Sun, 16 Jun 2019 09:15:11 +0200</pubDate>
      <guid>https://www.ale-lang.org/macros/</guid>
      <description>&lt;p&gt;When I first saw Lisp code, my immediate reaction was &lt;em&gt;&amp;ldquo;Wow, that&amp;rsquo;s a lot of parentheses!&amp;rdquo;&lt;/em&gt; I then backed up from the computer, turned around, walked away, and didn&amp;rsquo;t look at it again for years. I had convinced myself that any language that doesn&amp;rsquo;t have rich grammatical productions and super clean syntax couldn&amp;rsquo;t possibly be of any value. But that&amp;rsquo;s because I was young and stupid.&lt;/p&gt;&#xA;&lt;p&gt;I remained stupid until my mid 40s. And then something happened. Although I had been designing and developing languages for about a decade at that point, I had never studied language design at a theoretical level. So when I finally did, I was blown away. Lambda calculus, why had I never heard of it!? Prolog, it&amp;rsquo;s like magic! I&amp;rsquo;d been missing out!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tail Call Optimization</title>
      <link>https://www.ale-lang.org/tail-calls/</link>
      <pubDate>Fri, 17 May 2019 10:17:02 +0200</pubDate>
      <guid>https://www.ale-lang.org/tail-calls/</guid>
      <description>&lt;p&gt;Functional programming languages introduce a different set of compilation problems than do imperative languages. They&amp;rsquo;re simpler in many ways, but when it comes to accommodating the functional style of problem solving, the compiler author has a duty to the programmer that cannot be ignored.&lt;/p&gt;&#xA;&lt;p&gt;So where my &lt;a href=&#34;https://clojure.org&#34;&gt;Clojure&lt;/a&gt; people at? Fire up the &lt;a href=&#34;https://leiningen.org/&#34;&gt;Leiningen&lt;/a&gt; REPL, type the following code into it, and then tell me what happens. Don&amp;rsquo;t worry, I&amp;rsquo;ll wait. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-clojure&#34;&gt;(defn to-zero [x]&#xA;  (cond&#xA;    (&amp;gt; x 1000) (to-zero (- x 1))&#xA;    (&amp;gt; x 0)    (to-zero (- x 1))&#xA;    :else      0))&#xA;&#xA;(to-zero 9999)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If you said it spits out something like the following, then you&amp;rsquo;d be right:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extending Ale</title>
      <link>https://www.ale-lang.org/extending/</link>
      <pubDate>Wed, 17 Apr 2019 08:10:19 +0200</pubDate>
      <guid>https://www.ale-lang.org/extending/</guid>
      <description>&lt;aside aria-label=&#34;warning&#34; class=&#34;note warning&#34;&gt;&#xA;  &lt;div&gt;&#xA;    &lt;svg class=&#34;sign&#34; aria-hidden=&#34;true&#34; viewBox=&#34;0 0 48.430474 41.646302&#34; focusable=&#34;false&#34;&gt;&#xA;      &lt;use xlink:href=&#34;#warning&#34;&gt;&lt;/use&gt;&#xA;    &lt;/svg&gt;&#xA;&lt;p&gt;This article can be considered obsolete. Ale no longer exposes its internal encoding interface. Instead, the recommended way to extend Ale is by using the (asm*) special form. See &lt;a href=&#34;../assembler&#34;&gt;this article&lt;/a&gt; for more information.&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/aside&gt;&#xA;&lt;p&gt;Ale is a dialect of &lt;a href=&#34;https://en.wikipedia.org/wiki/Lisp_(programming_language)&#34;&gt;Lisp&lt;/a&gt; which means that it&amp;rsquo;s infinitely extensible out of the box. Hygienic macros and syntax quoting make this possible. But what if you really, &lt;em&gt;really&lt;/em&gt; need to start making deep changes? Like at the compiler level? Well, I&amp;rsquo;ve designed that to be a relatively straight-forward process as well!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Embedding Ale</title>
      <link>https://www.ale-lang.org/embedding/</link>
      <pubDate>Tue, 09 Apr 2019 08:19:19 +0200</pubDate>
      <guid>https://www.ale-lang.org/embedding/</guid>
      <description>&lt;p&gt;Ale is designed to be hosted within a &lt;a href=&#34;https://golang.org/&#34;&gt;Go&lt;/a&gt; process, but with a catch &amp;ndash; each environment you create is isolated from the others, meaning namespace modifications are not shared. So what &lt;em&gt;could have&lt;/em&gt; been as simple as calling &lt;code&gt;eval.String(&amp;quot;(+ 1 2 3)&amp;quot;)&lt;/code&gt; suddenly becomes a few lines of code more complicated.&lt;/p&gt;&#xA;&lt;p&gt;I should explain why this is.&lt;/p&gt;&#xA;&lt;h3 id=&#34;namespaces-and-their-environments&#34;&gt;Namespaces and Their Environments&lt;/h3&gt;&#xA;&lt;p&gt;Namespaces are where you put your stuff. They manage bindings from names to values. Bindings are immutable after being defined, though a binding &lt;em&gt;can&lt;/em&gt; be declared before being defined, which I&amp;rsquo;ll explain later.&lt;/p&gt;</description>
    </item>
    <item>
      <title>An Ale Introduction</title>
      <link>https://www.ale-lang.org/intro/</link>
      <pubDate>Sat, 06 Apr 2019 12:19:22 +0200</pubDate>
      <guid>https://www.ale-lang.org/intro/</guid>
      <description>&lt;p&gt;They say you&amp;rsquo;re not a great JavaScript programmer until you&amp;rsquo;ve written your own framework &amp;ndash; hence all of the half-assed attempts. Similarly you can&amp;rsquo;t really say you understand programming language design until you&amp;rsquo;ve implemented your own Lisp. So here we are.&lt;/p&gt;&#xA;&lt;p&gt;But why Lisp? The answer is straight-forward. Because even though over sixty years have come and gone since Lisp was first introduced, no language beats it for simplicity and power. None! And I dare you to prove me wrong. John McCarthy, may he rest in peace, designed a language that is as close to perfection as a human can hope to achieve.&lt;/p&gt;</description>
    </item>
    <item>
      <title>:</title>
      <link>https://www.ale-lang.org/docstring/accessor/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/accessor/</guid>
      <description>&lt;p&gt;Looks up &lt;code&gt;method&lt;/code&gt; from &lt;code&gt;target&lt;/code&gt; using &lt;code&gt;get&lt;/code&gt;, then calls the resulting value as a procedure with any remaining arguments. It expands to a normal &lt;code&gt;get&lt;/code&gt; followed by a call.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(: {:inc (lambda (x) (+ x 1))} :inc 41)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example returns &lt;code&gt;42&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>addition (&#43;)</title>
      <link>https://www.ale-lang.org/docstring/add/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/add/</guid>
      <description>&lt;p&gt;Calculates the sum of a set of numbers.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(+ 9 10 23)       ;; returns 42&#xA;(+ 50 12.6 34.8)  ;; returns 97.4&#xA;(+)               ;; returns 0&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>and</title>
      <link>https://www.ale-lang.org/docstring/and/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/and/</guid>
      <description>&lt;p&gt;Evaluates forms from left to right. As soon as one evaluates to false, will return that value. Otherwise, it will proceed to evaluate the next form.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(and (+ 1 2 3)&#xA;     false&#xA;     &amp;quot;not returned&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Will return &lt;em&gt;#f&lt;/em&gt; (false), never evaluating &lt;em&gt;&amp;ldquo;not returned&amp;rdquo;&lt;/em&gt;, whereas:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(and (+ 1 2 3)&#xA;     true&#xA;     &amp;quot;returned&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Will return the string &lt;em&gt;&amp;ldquo;returned&amp;rdquo;&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>append</title>
      <link>https://www.ale-lang.org/docstring/append/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/append/</guid>
      <description>&lt;p&gt;Returns a new sequence with &lt;code&gt;value&lt;/code&gt; appended to the end of &lt;code&gt;seq&lt;/code&gt;. The target must satisfy &lt;code&gt;appendable?&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(append [1 2 3] 4)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example returns &lt;code&gt;[1 2 3 4]&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>apply</title>
      <link>https://www.ale-lang.org/docstring/apply/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/apply/</guid>
      <description>&lt;p&gt;Evaluates the provided sequence and applies the provided function to its values and any explicitly included arguments.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x &#39;(1 2 3))&#xA;(apply + x)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;6&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>asm</title>
      <link>https://www.ale-lang.org/docstring/asm/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/asm/</guid>
      <description>&lt;p&gt;Provides direct access to Ale&amp;rsquo;s assembler syntax. This form is primarily used by the core library and low-level code that needs explicit control over VM instructions.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(asm&#xA;  const 99)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example emits code that returns the literal value &lt;code&gt;99&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>assoc</title>
      <link>https://www.ale-lang.org/docstring/assoc/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/assoc/</guid>
      <description>&lt;p&gt;Returns a new mapper sequence wherein the specified key/value pairs are associated. If a key already exists, the value replaces the one previously stored; otherwise the pair is added to the sequence.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define robert {:name &amp;quot;Bob&amp;quot; :age 45})&#xA;(assoc robert (:age . 46))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example returns a copy of &lt;em&gt;robert&lt;/em&gt; wherein the value associated with &lt;em&gt;:age&lt;/em&gt; has been replaced by the number &lt;em&gt;46&lt;/em&gt;. The original sequence is unaffected.&lt;/p&gt;</description>
    </item>
    <item>
      <title>atom?</title>
      <link>https://www.ale-lang.org/docstring/is-atom/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-atom/</guid>
      <description>&lt;p&gt;A form is considered to be atomic if it cannot be further evaluated and would otherwise evaluate to itself.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(atom? &#39;() :hello &amp;quot;there&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#t&lt;/em&gt; (true) because each value is atomic.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be atomic.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(!atom? &#39;(+ 1 2 3) [4 5 6])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#t&lt;/em&gt; (true) because compound types such as lists and vectors are not considered to be atomic.&lt;/p&gt;</description>
    </item>
    <item>
      <title>begin</title>
      <link>https://www.ale-lang.org/docstring/begin/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/begin/</guid>
      <description>&lt;p&gt;Evaluate each form in turn, returning the final evaluation as its result.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(begin&#xA;  (println &amp;quot;hello&amp;quot;)&#xA;  &amp;quot;returned&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>branching helpers</title>
      <link>https://www.ale-lang.org/docstring/branching-helpers/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/branching-helpers/</guid>
      <description>&lt;p&gt;These macros build on &lt;code&gt;if&lt;/code&gt; to cover common control-flow patterns. &lt;code&gt;case&lt;/code&gt; compares a value using &lt;code&gt;eq&lt;/code&gt;, and a clause test may be either a single value or a list of values. &lt;code&gt;if-let&lt;/code&gt; binds a value and tests whether it is truthy. &lt;code&gt;when-let&lt;/code&gt; is the body-only form of &lt;code&gt;if-let&lt;/code&gt;. If no &lt;code&gt;case&lt;/code&gt; clause matches, it raises an error.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(if-let [x (get {:name &amp;quot;ale&amp;quot;} :title false)]&#xA;  (str &amp;quot;hello &amp;quot; x)&#xA;  &amp;quot;missing&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>bytes</title>
      <link>https://www.ale-lang.org/docstring/bytes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/bytes/</guid>
      <description>&lt;p&gt;Creates a byte sequence from numeric values. Byte sequences also have reader syntax using &lt;code&gt;#b[...]&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(bytes 65 66 67)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example returns the byte sequence representing &lt;code&gt;ABC&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>bytes?</title>
      <link>https://www.ale-lang.org/docstring/is-bytes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-bytes/</guid>
      <description>&lt;p&gt;If all forms evaluate to byte sequences, this function returns &lt;em&gt;#t&lt;/em&gt; (true). Otherwise it returns &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(bytes? (bytes 65 66) #b[1 2 3])&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>car</title>
      <link>https://www.ale-lang.org/docstring/first/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/first/</guid>
      <description>&lt;p&gt;This function will return the first element of the specified pair or sequence, or the empty list if the sequence is empty.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x &#39;(99 64 32 48))&#xA;(car x)  ;; will return 99&#xA;&#xA;(define y (100 . 200))&#xA;(car y)  ;; will return 100&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>car/cdr accessors</title>
      <link>https://www.ale-lang.org/docstring/cadr/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/cadr/</guid>
      <description>&lt;p&gt;These are compound sequence accessors that combine multiple &lt;code&gt;car&lt;/code&gt; and &lt;code&gt;cdr&lt;/code&gt; operations. The name of each function describes which operations to perform from right to left. &lt;code&gt;a&lt;/code&gt; represents &lt;code&gt;car&lt;/code&gt;, which gets the first element. &lt;code&gt;d&lt;/code&gt; represents &lt;code&gt;cdr&lt;/code&gt;, which gets the rest of the list.&lt;/p&gt;&#xA;&lt;h4 id=&#34;examples&#34;&gt;Examples&lt;/h4&gt;&#xA;&lt;p&gt;Given a nested list structure:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x &#39;((1 2) (3 4)))&#xA;(caar x)  ; gets car of (car x) -&amp;gt; 1&#xA;(cadr x)  ; gets car of (cdr x) -&amp;gt; (3 4)&#xA;(cdar x)  ; gets cdr of (car x) -&amp;gt; (2)&#xA;(cddr x)  ; gets cdr of (cdr x) -&amp;gt; ()&#xA;&#xA;;; More deeply nested examples&#xA;(define y &#39;((1 2) ((3 4) 5)))&#xA;(cadar y)  ; car of (cdr of (car y)) -&amp;gt; 2&#xA;(caadr y)  ; car of (car of (cdr y)) -&amp;gt; (3 4)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The functions can access up to 4 levels deep in a nested list structure. Reading from right to left helps understand the access pattern - for example, &lt;code&gt;caddr&lt;/code&gt; means &amp;ldquo;get the first element (car) of the rest of the rest (cddr) of the list&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>cdr</title>
      <link>https://www.ale-lang.org/docstring/rest/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/rest/</guid>
      <description>&lt;p&gt;This function will return the portion of a pair or sequence that excludes its first element. For sequences, this will be the remainder of the sequence. For cons pairs, this will be the cdr portion.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x &#39;(99 64 32 48))&#xA;(cdr x)  ;; will return (64, 32, 48)&#xA;&#xA;(define y (100 . 200))&#xA;(cdr y)  ;; will return 200&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>chan</title>
      <link>https://www.ale-lang.org/docstring/chan/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/chan/</guid>
      <description>&lt;p&gt;A channel is a data structure used to generate a lazy sequence of values. The result is a hash-map consisting of an &lt;code&gt;emit&lt;/code&gt; function, a &lt;code&gt;close&lt;/code&gt; function, and a sequence. Depending on the size of the channel&amp;rsquo;s buffer, retrieving an element from the sequence &lt;em&gt;may block&lt;/em&gt;, waiting for the next value to be emitted or for the channel to be closed. Emitting a value to a channel will also block until the buffer is flushed as a result of iterating over the sequence.&lt;/p&gt;</description>
    </item>
    <item>
      <title>comp</title>
      <link>https://www.ale-lang.org/docstring/comp/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/comp/</guid>
      <description>&lt;p&gt;Returns a new function based on chained invocation of the provided functions, from left to right. The first composed function can accept multiple arguments, while any subsequent functions are applied with the result of the previous.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define mul2Add5 (comp (partial \* 2) (partial + 5)))&#xA;(mul2Add5 10)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;25&lt;/em&gt; as though &lt;code&gt;(+ 5 (\* 2 10))&lt;/code&gt; were called.&lt;/p&gt;</description>
    </item>
    <item>
      <title>concat</title>
      <link>https://www.ale-lang.org/docstring/concat/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/concat/</guid>
      <description>&lt;p&gt;Creates a lazy sequence whose content is the result of concatenating the elements of each provided sequence. To immediately materialize a complete concatenated sequence, use the &lt;code&gt;concat!&lt;/code&gt; function.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(seq-&amp;gt;list (concat [1 2 3] &#39;(4 5 6)))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will return the list &lt;em&gt;(1 2 3 4 5 6)&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>cond</title>
      <link>https://www.ale-lang.org/docstring/cond/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/cond/</guid>
      <description>&lt;p&gt;For each &lt;em&gt;pred-then&lt;/em&gt; clause, the predicate will be evaluated, and if it is truthy (not false), the &lt;em&gt;then&lt;/em&gt; form is evaluated and returned, otherwise the next clause is processed.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x 99)&#xA;&#xA;(cond&#xA;  [(&amp;lt; x 50)  &amp;quot;was less than 50&amp;quot;    ]&#xA;  [(&amp;gt; x 100) &amp;quot;was greater than 100&amp;quot;]&#xA;  [:else     &amp;quot;was in between&amp;quot;      ])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In this case, &lt;em&gt;&amp;ldquo;was in between&amp;rdquo;&lt;/em&gt; will be returned. The reason that this works is that the &lt;code&gt;:else&lt;/code&gt; keyword, like all keywords, evaluates to truthy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>conditional thread first (cond-&gt;)</title>
      <link>https://www.ale-lang.org/docstring/thread-cond-first/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/thread-cond-first/</guid>
      <description>&lt;p&gt;Like &lt;code&gt;-&amp;gt;&lt;/code&gt;, but each form is paired with a test condition. The form is only applied if the test evaluates to true. Each test is evaluated with the current threaded value in scope.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(cond-&amp;gt; 10&#xA;        [true   (+ 5)]   ; Always applies: 10 + 5 = 15&#xA;        [(&amp;gt; 12) (\* 2)]   ; Applies if &amp;gt; 12: 15 \* 2 = 30&#xA;        [(&amp;lt; 25) (/ 3)]   ; Doesn&#39;t apply (30 is not &amp;lt; 25)&#xA;        [true   (- 1)])  ; Always applies: 30 - 1 = 29&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;another-example&#34;&gt;Another Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(cond-&amp;gt; {}&#xA;        [empty?            (assoc (:name . &amp;quot;John&amp;quot;))]&#xA;        [!empty?           (assoc (:size . &amp;quot;non-empty&amp;quot;))]&#xA;        [(contains? :name) (assoc (:greeting . &amp;quot;Hello&amp;quot;))]&#xA;        [object?           (assoc (:type . &amp;quot;object&amp;quot;))])&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>conditional thread last (cond-&gt;&gt;)</title>
      <link>https://www.ale-lang.org/docstring/thread-cond-last/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/thread-cond-last/</guid>
      <description>&lt;p&gt;Like &lt;code&gt;-&amp;gt;&amp;gt;&lt;/code&gt;, but each form is paired with a test condition. The form is only applied if the test evaluates to true. Each test is evaluated with the current threaded value in scope.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(cond-&amp;gt;&amp;gt; [1 2 3 4 5]&#xA;         [seq?    (map (lambda (x) (\* x 2)))]  ; doubles: [2 4 6 8 10]&#xA;         [!empty? (filter even?)]              ; keeps evens: [2 4 6 8 10]&#xA;         [(&amp;gt; 2)   (take 3)]                    ; takes first 3: [2 4 6]&#xA;         [false   (concat [0])])               ; skipped&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;another-example&#34;&gt;Another Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(cond-&amp;gt;&amp;gt; [1 2 3]&#xA;         [seq?   (filter even?)]  ; predicate true, filters to [2]&#xA;         [empty? (concat [4 5])]  ; predicate false, skips concat&#xA;         [true   (take 1)])       ; takes first element&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>conj</title>
      <link>https://www.ale-lang.org/docstring/conj/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/conj/</guid>
      <description>&lt;p&gt;Adds elements to a conjoinable sequence. This behavior will differ depending on the concrete type. A list will prepend, a vector will append, while an object makes no guarantees about ordering.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(conj [1 2 3 4] 5 6 7 8)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Will return the vector &lt;em&gt;[1 2 3 4 5 6 7 8]&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>cons</title>
      <link>https://www.ale-lang.org/docstring/cons/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/cons/</guid>
      <description>&lt;p&gt;When &lt;code&gt;cdr&lt;/code&gt; is an ordered sequence, such as a list or vector, the result is a new list or vector with the &lt;code&gt;car&lt;/code&gt; value prepended to the original. With an unordered sequence, such as an object array, there is no guarantee regarding position. If &lt;code&gt;cdr&lt;/code&gt; is not a sequence, then a new cons cell will be constructed.&lt;/p&gt;&#xA;&lt;p&gt;The name &lt;em&gt;cons&lt;/em&gt; is a vestige of when Lisp implementations constructed new lists or cells by pairing a &lt;em&gt;car&lt;/em&gt; (contents of the address part of register) with a &lt;em&gt;cdr&lt;/em&gt; (contents of the decrement part of register).&lt;/p&gt;</description>
    </item>
    <item>
      <title>contains?</title>
      <link>https://www.ale-lang.org/docstring/contains/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/contains/</guid>
      <description>&lt;p&gt;Returns &lt;em&gt;#t&lt;/em&gt; if &lt;code&gt;coll&lt;/code&gt; can resolve &lt;code&gt;key&lt;/code&gt;, otherwise &lt;em&gt;#f&lt;/em&gt;. This works with mapped lookup types such as objects and sets.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(contains? #{:name :age} :name)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example returns &lt;em&gt;#t&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>core literals</title>
      <link>https://www.ale-lang.org/docstring/literals/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/literals/</guid>
      <description>&lt;p&gt;These names are predefined literal values. &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt; are Ale&amp;rsquo;s boolean values. &lt;code&gt;null&lt;/code&gt; is the empty list or null value. &lt;code&gt;+inf&lt;/code&gt;, &lt;code&gt;-inf&lt;/code&gt;, and &lt;code&gt;nan&lt;/code&gt; are special floating-point values.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;[true false null +inf -inf nan]&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>counted?</title>
      <link>https://www.ale-lang.org/docstring/is-counted/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-counted/</guid>
      <description>&lt;p&gt;If all forms evaluate to a valid sequence than can report its length without counting, then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first non-counted sequence will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(counted? &#39;(1 2 3 4) [5 6 7 8])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#t&lt;/em&gt; (true).&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be valid counted sequences.&lt;/p&gt;</description>
    </item>
    <item>
      <title>current-time</title>
      <link>https://www.ale-lang.org/docstring/current-time/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/current-time/</guid>
      <description>&lt;p&gt;Returns the system&amp;rsquo;s current time, measured in nanoseconds since January 1, 1970 UTC.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(current-time)  ;; returns 1554720691499809478&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>declare</title>
      <link>https://www.ale-lang.org/docstring/declare/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/declare/</guid>
      <description>&lt;p&gt;Forward declares bindings. This means that the names will be known in the current namespace, but not yet assigned. This can be useful when two functions refer to one another.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;private&lt;/code&gt; variant makes the binding private to the current namespace.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(declare is-odd-number)&#xA;&#xA;(define (is-even-number n)&#xA;  (cond [(= n 0) true]&#xA;        [:else   (is-odd-number (- n 1))]))&#xA;&#xA;(define (is-odd-number n)&#xA;  (cond [(= n 0) false]&#xA;        [:else   (is-even-number (- n 1))]))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>define</title>
      <link>https://www.ale-lang.org/docstring/define/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/define/</guid>
      <description>&lt;p&gt;Binds a value to a global name. All bindings are immutable and result in an error being raised if an attempt is made to re-bind them. This behavior is different from most Lisps, as they will generally fail silently in such cases.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x&#xA;  (map&#xA;    (lambda (y) (\* y 2))&#xA;    seq1 seq2 seq3))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will create a lazy map where each element of the three provided sequences is doubled upon request. It will then bind that lazy map to the name &lt;em&gt;x&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>define-lambda</title>
      <link>https://www.ale-lang.org/docstring/define-lambda/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/define-lambda/</guid>
      <description>&lt;p&gt;Bind a function by name to the current namespace.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define-lambda (fib i)&#xA;  (cond&#xA;    [(= i 0) 0]&#xA;    [(= i 1) 1]&#xA;    [(= i 2) 1]&#xA;    [:else   (+ (fib (- i 2)) (fib (- i 1)))]))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example performs recursion with no tail call optimization, and no memoization. For a more performant and stack-friendly fibonacci sequence generation example, see the documentation of &lt;code&gt;lazy-seq&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>define-macro</title>
      <link>https://www.ale-lang.org/docstring/define-macro/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/define-macro/</guid>
      <description>&lt;p&gt;Binds a macro to a global name. The reader expands a macro to alter the source code&amp;rsquo;s data representation before it is evaluated.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define-macro (cond . clauses)&#xA;  (when (seq clauses)&#xA;    (if (= 1 (length clauses))&#xA;      (clauses 0)&#xA;      (list &#39;ale/if&#xA;        (clauses 0) (clauses 1)&#xA;        (cons &#39;cond (rest (rest clauses)))))))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>delay</title>
      <link>https://www.ale-lang.org/docstring/delay/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/delay/</guid>
      <description>&lt;p&gt;&lt;code&gt;delay&lt;/code&gt; returns a promise that evaluates its body the first time it is forced. That result is cached, so later calls return immediately. &lt;code&gt;force&lt;/code&gt; resolves one promise layer, or returns non-promises unchanged. &lt;code&gt;force!&lt;/code&gt; keeps forcing until the result is no longer a promise. &lt;code&gt;delay-force&lt;/code&gt; delays a computation whose result should be forced once before being cached.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define p (delay&#xA;            (println &amp;quot;hello once&amp;quot;)&#xA;            &amp;quot;hello&amp;quot;))&#xA;(force p) ;; prints &amp;quot;hello once&amp;quot;&#xA;(force p)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The first invocation of &lt;code&gt;p&lt;/code&gt; will print &lt;em&gt;&amp;ldquo;hello once&amp;rdquo;&lt;/em&gt; to the console, and also return the string &lt;em&gt;&amp;ldquo;hello&amp;rdquo;&lt;/em&gt;. Subsequent invocations of &lt;code&gt;p&lt;/code&gt; will only return &lt;em&gt;&amp;ldquo;hello&amp;rdquo;&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>dissoc</title>
      <link>https://www.ale-lang.org/docstring/dissoc/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/dissoc/</guid>
      <description>&lt;p&gt;Returns a new mapper sequence wherein the associations identified by the provided keys are removed. If the keys don&amp;rsquo;t exist, the original sequence is returned.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define robert {:name &amp;quot;Bob&amp;quot; :age 45})&#xA;(dissoc robert :age)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example returns a copy of &lt;em&gt;robert&lt;/em&gt; from which the &lt;em&gt;:age&lt;/em&gt; association has been removed. The original sequence is unaffected.&lt;/p&gt;</description>
    </item>
    <item>
      <title>division (/)</title>
      <link>https://www.ale-lang.org/docstring/div/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/div/</guid>
      <description>&lt;p&gt;Calculates the collective quotient of a set of numbers.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(/ 10 3)      ;; returns 10/3&#xA;(/ 10 3.0)    ;; returns 3.3333333333333335&#xA;(/ 20 2.0 4)  ;; returns 2.5&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>drop</title>
      <link>https://www.ale-lang.org/docstring/drop/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/drop/</guid>
      <description>&lt;p&gt;Return a lazy sequence that excludes the first &lt;em&gt;count&lt;/em&gt; elements of the provided sequence. If the source sequence is shorter than the requested count, an empty list will be returned.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x &#39;(1 2 3 4))&#xA;(define y [5 6 7 8])&#xA;(drop 3 (concat x y))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return the lazy sequence &lt;em&gt;(4 5 6 7 8)&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>empty?</title>
      <link>https://www.ale-lang.org/docstring/empty/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/empty/</guid>
      <description>&lt;p&gt;If all forms evaluate to empty sequences, then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first evaluation that is not an empty sequence will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(empty? &#39;(1 2 3 4) [] {})&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#f&lt;/em&gt; (false) because the first form is a list with four elements.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be nil.&lt;/p&gt;</description>
    </item>
    <item>
      <title>equal to (=)</title>
      <link>https://www.ale-lang.org/docstring/eq/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/eq/</guid>
      <description></description>
    </item>
    <item>
      <title>eval</title>
      <link>https://www.ale-lang.org/docstring/eval/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/eval/</guid>
      <description></description>
    </item>
    <item>
      <title>false?</title>
      <link>https://www.ale-lang.org/docstring/is-false/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-false/</guid>
      <description>&lt;p&gt;If all forms evaluate to false (&lt;em&gt;#f&lt;/em&gt;), then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first non-false will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(false? (&amp;lt; 3 2) (&amp;gt; 5 10))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#t&lt;/em&gt; (true) because all the equalities result in &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be true. This is equivalent to the &lt;em&gt;true?&lt;/em&gt; predicate.&lt;/p&gt;</description>
    </item>
    <item>
      <title>filter</title>
      <link>https://www.ale-lang.org/docstring/filter/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/filter/</guid>
      <description>&lt;p&gt;Creates a lazy sequence whose content is the result of applying the provided function to the elements of the provided sequence. If the result of the application is truthy (not false), then the value will be included in the resulting sequence.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(filter (lambda (x) (&amp;lt; x 3)) [1 2 3 4])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will return the lazy sequence &lt;em&gt;(1 2)&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>fold-left</title>
      <link>https://www.ale-lang.org/docstring/fold-left/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/fold-left/</guid>
      <description>&lt;p&gt;Iterates over a sequence, reducing its elements to a single resulting value. The function provided must take two arguments. The first and second sequence elements encountered are the initial values applied to that function. Thereafter, the result of the previous calculation is used as the first argument, while the next element is used as the second argument.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(fold-left + 5 (range 1 11))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will return the value &lt;em&gt;60&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>fold-right</title>
      <link>https://www.ale-lang.org/docstring/fold-right/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/fold-right/</guid>
      <description>&lt;p&gt;These forms reduce a sequence from right to left. &lt;code&gt;fold-right&lt;/code&gt; uses &lt;code&gt;reverse&lt;/code&gt;, while &lt;code&gt;fold-right!&lt;/code&gt; uses &lt;code&gt;reverse!&lt;/code&gt; and can therefore work with non-reversible sequences by materializing them first. &lt;code&gt;foldr&lt;/code&gt; is an alias for &lt;code&gt;fold-right&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(fold-right cons &#39;() [1 2 3])&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>for</title>
      <link>https://www.ale-lang.org/docstring/for/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/for/</guid>
      <description>&lt;p&gt;&lt;code&gt;for&lt;/code&gt; builds a lazy sequence by iterating over one or more bindings. &lt;code&gt;for-each&lt;/code&gt; evaluates the same comprehension for side effects and returns the final result.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(for ([x [1 2]]&#xA;      [y [10 20]])&#xA;  (+ x y))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example lazily yields &lt;code&gt;11&lt;/code&gt;, &lt;code&gt;21&lt;/code&gt;, &lt;code&gt;12&lt;/code&gt;, and &lt;code&gt;22&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>future</title>
      <link>https://www.ale-lang.org/docstring/future/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/future/</guid>
      <description>&lt;p&gt;Returns a promise whose expressions are immediately evaluated in another thread of execution.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define fut (future&#xA;  (seq-&amp;gt;vector (generate&#xA;    (emit &amp;quot;red&amp;quot;)&#xA;    (emit &amp;quot;orange&amp;quot;)&#xA;    (emit &amp;quot;yellow&amp;quot;)))))&#xA;&#xA;(fut)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example produces a promise called &lt;em&gt;fut&lt;/em&gt; that converts the results of an asynchronous block into a vector. The &lt;code&gt;(fut)&lt;/code&gt; call will block until the future returns a value.&lt;/p&gt;</description>
    </item>
    <item>
      <title>generate</title>
      <link>https://www.ale-lang.org/docstring/generate/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/generate/</guid>
      <description>&lt;p&gt;Evaluate the specified forms in a separate thread of execution. Returns a sequence that will iterate over any of the values that are emitted. Values are emitted using a locally scoped function of the form &lt;code&gt;(emit value)&lt;/code&gt;. The forms are executed as a co-routine, meaning that a call to emit &lt;strong&gt;will block&lt;/strong&gt; until the corresponding element is resolved by a consumer of the sequence.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define colors (generate&#xA;  (emit &amp;quot;red&amp;quot;)&#xA;  (emit &amp;quot;orange&amp;quot;)&#xA;  (emit &amp;quot;yellow&amp;quot;)))&#xA;&#xA;(seq-&amp;gt;vector colors)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will bind the lazy sequence returned by the call to generate to the name &lt;code&gt;colors&lt;/code&gt;. The seq-&amp;gt;vector call will block until that variable is fully consumed, and then return the vector &lt;em&gt;[&amp;ldquo;red&amp;rdquo; &amp;ldquo;orange&amp;rdquo; &amp;ldquo;yellow&amp;rdquo;]&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>gensym</title>
      <link>https://www.ale-lang.org/docstring/gensym/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/gensym/</guid>
      <description>&lt;p&gt;If an unqualified symbol is provided, that symbol will be used to clarify the uniquely generated symbol. This function provides the underlying behavior for hash-tailed symbols in syntax-highlighting macros.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(let [s (gensym &#39;var)]&#xA;  (list &#39;ale/let [s &amp;quot;hello&amp;quot;] s))&#xA;&#xA;;; is equivalent to&#xA;``(let [var# &amp;quot;hello&amp;quot;] var#)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;&amp;ldquo;hello&amp;rdquo;&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>get</title>
      <link>https://www.ale-lang.org/docstring/get/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/get/</guid>
      <description>&lt;p&gt;Returns the value within a sequence that is associated with the specified key. If the key does not exist within the sequence, then either the default value is returned, or an error is raised.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define robert {:name &amp;quot;Bob&amp;quot; :age 45})&#xA;(get robert :address &amp;quot;wrong&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example returns &lt;em&gt;&amp;ldquo;wrong&amp;rdquo;&lt;/em&gt; because the object doesn&amp;rsquo;t contain an :address property.&lt;/p&gt;</description>
    </item>
    <item>
      <title>go</title>
      <link>https://www.ale-lang.org/docstring/go/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/go/</guid>
      <description>&lt;p&gt;The provided forms will be evaluated in a separate thread of execution. Any resulting value of the block will be discarded.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define ch (chan))&#xA;(go (: ch :emit &amp;quot;hello&amp;quot;)&#xA;    (: ch :close))&#xA;(str (first (ch :seq)) &amp;quot; world!&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>greater or equal (&gt;=)</title>
      <link>https://www.ale-lang.org/docstring/gte/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/gte/</guid>
      <description></description>
    </item>
    <item>
      <title>greater-than (&gt;)</title>
      <link>https://www.ale-lang.org/docstring/gt/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/gt/</guid>
      <description></description>
    </item>
    <item>
      <title>identical (eq)</title>
      <link>https://www.ale-lang.org/docstring/is-identical/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-identical/</guid>
      <description>&lt;p&gt;Return &lt;em&gt;#f&lt;/em&gt; (false) as soon as it encounters a form that is not identical to the first. Otherwise, will return &lt;em&gt;#t&lt;/em&gt; (true).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define h &amp;quot;hello&amp;quot;)&#xA;(eq &amp;quot;hello&amp;quot; h)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. In this case, &lt;em&gt;#t&lt;/em&gt; (true) will be returned if not all forms are equal.&lt;/p&gt;</description>
    </item>
    <item>
      <title>if</title>
      <link>https://www.ale-lang.org/docstring/if/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/if/</guid>
      <description>&lt;p&gt;If the evaluated predicate is truthy (not &lt;em&gt;#f&lt;/em&gt; (false) or the empty list), the &lt;em&gt;then&lt;/em&gt; form is evaluated and returned, otherwise the &lt;em&gt;else&lt;/em&gt; form, if any, will be evaluated and returned.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x &#39;(1 2 3 4 5 6 7 8))&#xA;&#xA;(if (&amp;gt; (length x) 3)&#xA;    &amp;quot;x is big&amp;quot;&#xA;    &amp;quot;x is small&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If the symbol &lt;code&gt;unless&lt;/code&gt; is used instead of &lt;code&gt;if&lt;/code&gt;, then the logical branching will be inverted.&lt;/p&gt;</description>
    </item>
    <item>
      <title>inc / dec</title>
      <link>https://www.ale-lang.org/docstring/inc-dec/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/inc-dec/</guid>
      <description>&lt;p&gt;&lt;code&gt;inc&lt;/code&gt; adds &lt;code&gt;1&lt;/code&gt; to a numeric value and &lt;code&gt;dec&lt;/code&gt; subtracts &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(inc 41) ; =&amp;gt; 42&#xA;(dec 42) ; =&amp;gt; 41&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>index-of</title>
      <link>https://www.ale-lang.org/docstring/index-of/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/index-of/</guid>
      <description>&lt;p&gt;Returns the zero-based index of the first matching value in a sequence. If no value matches, returns &lt;em&gt;#f&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(index-of [4 8 15 16] 15)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example returns &lt;code&gt;2&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>indexed?</title>
      <link>https://www.ale-lang.org/docstring/is-indexed/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-indexed/</guid>
      <description>&lt;p&gt;If all forms evaluate to a valid sequence that can be accessed by index, then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first non-indexed sequence will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(indexed? &#39;(1 2 3 4) [5 6 7 8])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#t&lt;/em&gt; (true).&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be valid indexed sequences.&lt;/p&gt;</description>
    </item>
    <item>
      <title>juxt</title>
      <link>https://www.ale-lang.org/docstring/juxt/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/juxt/</guid>
      <description>&lt;p&gt;Returns a new function that represents the juxtaposition of the provided functions. This function returns a vector containing the result of applying each provided function to the juxtaposed function&amp;rsquo;s arguments.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define juxt-math (juxt * + - /))&#xA;(juxt-math 32 10)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;[320 42 22 16/5]&lt;/em&gt; as though &lt;code&gt;[(* 32 10) (+ 32 10) (- 32 10) (/ 32 10)]&lt;/code&gt; were called.&lt;/p&gt;</description>
    </item>
    <item>
      <title>keyword?</title>
      <link>https://www.ale-lang.org/docstring/is-keyword/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-keyword/</guid>
      <description>&lt;p&gt;A form is considered to be a keyword if it is a symbol with a colon (&amp;quot;:&amp;quot;) prefix. Keywords are often used as unique identifiers and are typically used to access values in objects or define objects keys.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(keyword? :keyword1 :keyword2 :keyword3)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#t&lt;/em&gt; (true) because each provided form is a keyword.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be keywords.&lt;/p&gt;</description>
    </item>
    <item>
      <title>label</title>
      <link>https://www.ale-lang.org/docstring/label/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/label/</guid>
      <description>&lt;p&gt;Wraps a form with a stable name, primarily to support recursive procedure definitions and clearer generated values.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(label fact&#xA;  (lambda (n)&#xA;    (if (zero? n) 1 (* n (fact (dec n))))))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>lambda</title>
      <link>https://www.ale-lang.org/docstring/lambda/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/lambda/</guid>
      <description>&lt;p&gt;Creates a lambda function that may be passed around in a first-class manner.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define double&#xA;  (let [mul 2]&#xA;    (lambda (x) (\* x mul))))&#xA;&#xA;(seq-&amp;gt;vector&#xA;  (map double &#39;(1 2 3 4 5 6)))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return the vector &lt;em&gt;[2 4 6 8 10 12]&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Lambdas produce a closure that copies the bindings that have been referenced from the surrounding scope.&lt;/p&gt;</description>
    </item>
    <item>
      <title>last</title>
      <link>https://www.ale-lang.org/docstring/last/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/last/</guid>
      <description>&lt;p&gt;This function will return the last element of the specified sequence, or the empty list if the sequence is empty. If the sequence is lazily computed, asynchronous, or otherwise incapable of returning a count, this function will raise an error.&lt;/p&gt;&#xA;&lt;p&gt;To perform a brute-force scan of the sequence, use the &lt;code&gt;last!&lt;/code&gt; function, keeping in mind that &lt;code&gt;last!&lt;/code&gt; may never return a result.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x &#39;(99 64 32 48))&#xA;(last x)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;48&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>lazy</title>
      <link>https://www.ale-lang.org/docstring/lazy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/lazy/</guid>
      <description>&lt;p&gt;Like &lt;code&gt;delay&lt;/code&gt;, but if the first forced result is a promise, it will continue to be forced until a non-promise result is capable of being returned.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define p (lazy&#xA;            (println &amp;quot;hello once&amp;quot;)&#xA;            (delay&#xA;              (println &amp;quot;hello twice&amp;quot;)&#xA;              &amp;quot;hello&amp;quot;)))&#xA;(force p) ;; prints &amp;quot;hello once / hello twice&amp;quot;&#xA;(force p)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The first invocation of &lt;code&gt;p&lt;/code&gt; will print &lt;em&gt;&amp;ldquo;hello once&amp;rdquo;&lt;/em&gt; followed by &lt;em&gt;&amp;ldquo;hello twice&amp;rdquo;&lt;/em&gt; to the console, also returning the string &lt;em&gt;&amp;ldquo;hello&amp;rdquo;&lt;/em&gt;. Subsequent invocations of &lt;code&gt;p&lt;/code&gt; will only return &lt;em&gt;&amp;ldquo;hello&amp;rdquo;&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>lazy-seq</title>
      <link>https://www.ale-lang.org/docstring/lazy-seq/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/lazy-seq/</guid>
      <description>&lt;h4 id=&#34;an-example&#34;&gt;An Example:&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define (fib-seq)&#xA;  (let [fib (lambda-rec fib (a b)&#xA;              (lazy-seq (cons a (fib b (+ a b)))))]&#xA;    (fib 0 1)))&#xA;&#xA;(for-each [x (take 300 (fib-seq))]&#xA;  (println x))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example prints the first 300 fibonacci numbers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>length</title>
      <link>https://www.ale-lang.org/docstring/length/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/length/</guid>
      <description>&lt;p&gt;The &lt;code&gt;length&lt;/code&gt; function will return the number of elements in a sequence.&lt;/p&gt;&#xA;&lt;p&gt;If the sequence is lazily computed, asynchronous, or otherwise incapable of returning a count, this function will raise an error. To perform a brute-force count of a sequence, use the &lt;code&gt;length!&lt;/code&gt; function, keeping in mind that it may never return a result.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(length &#39;(1 2 3 4))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;4&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>less or equal (&lt;=)</title>
      <link>https://www.ale-lang.org/docstring/lte/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/lte/</guid>
      <description></description>
    </item>
    <item>
      <title>less-than (&lt;)</title>
      <link>https://www.ale-lang.org/docstring/lt/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/lt/</guid>
      <description></description>
    </item>
    <item>
      <title>let</title>
      <link>https://www.ale-lang.org/docstring/let/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/let/</guid>
      <description>&lt;p&gt;Create a new local scope, evaluate the provided expressions, and then bind the resulting values to their respective names. The body is evaluated within that scope and returns the result of its final form.&lt;/p&gt;&#xA;&lt;p&gt;The binding forms differ in how names can see one another. &lt;code&gt;let&lt;/code&gt; performs bindings in parallel. &lt;code&gt;let*&lt;/code&gt; performs bindings sequentially. &lt;code&gt;let-rec&lt;/code&gt; allows recursive and mutually recursive references.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(let ([x &#39;(1 2 3 4)]&#xA;      [y [5 6 7 8] ])&#xA;  (concat x y))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will create a list called &lt;em&gt;x&lt;/em&gt; and a vector called &lt;em&gt;y&lt;/em&gt; and return the lazy concatenation of those sequences. Note that the two names do not exist outside the &lt;code&gt;let&lt;/code&gt; form.&lt;/p&gt;</description>
    </item>
    <item>
      <title>let thread (let-&gt;)</title>
      <link>https://www.ale-lang.org/docstring/thread-let/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/thread-let/</guid>
      <description>&lt;p&gt;A threaded let binding that threads the bound value through each form by name. Each form receives the current value of the binding and the result becomes the new value of the binding.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(let-&amp;gt; [x 10]&#xA;       (+ x 5)&#xA;       (\* x 2)&#xA;       (/ x 2))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;another-example&#34;&gt;Another Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(let-&amp;gt; [user {}]&#xA;       (assoc user (:name . &amp;quot;John&amp;quot;))&#xA;       (assoc user (:age . 25))&#xA;       (assoc user (:status . &amp;quot;active&amp;quot;)))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>letfn</title>
      <link>https://www.ale-lang.org/docstring/letfn/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/letfn/</guid>
      <description>&lt;p&gt;Creates a local scope containing named recursive function bindings. It is useful when several local procedures need to reference one another.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(letfn [(lambda-rec even? (n) (if (zero? n) true (odd? (dec n))))&#xA;        (lambda-rec odd?  (n) (if (zero? n) false (even? (dec n))))]&#xA;  (even? 10))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>list</title>
      <link>https://www.ale-lang.org/docstring/list/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/list/</guid>
      <description>&lt;p&gt;Create a new list whose elements are the evaluated forms provided, or return the empty list if no forms are provided.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x &amp;quot;hello&amp;quot;)&#xA;(define y &amp;quot;there&amp;quot;)&#xA;(list x y)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>list?</title>
      <link>https://www.ale-lang.org/docstring/is-list/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-list/</guid>
      <description>&lt;p&gt;If all forms evaluate to a list, then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first non-list will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(list? &#39;(1 2 3 4) [5 6 7 8])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#f&lt;/em&gt; (false) because the second form is a vector.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be lists.&lt;/p&gt;</description>
    </item>
    <item>
      <title>macro</title>
      <link>https://www.ale-lang.org/docstring/macro/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/macro/</guid>
      <description>&lt;p&gt;Converts a procedure into a macro value. The procedure receives the unevaluated input forms and returns expanded code. In most user code, &lt;code&gt;define-macro&lt;/code&gt; is the more convenient interface.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define twice&#xA;  (macro (lambda (form) `(+ ,form ,form))))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>macro expansion</title>
      <link>https://www.ale-lang.org/docstring/macroexpand/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/macroexpand/</guid>
      <description>&lt;p&gt;&lt;code&gt;macroexpand-1&lt;/code&gt; expands a single macro layer. &lt;code&gt;macroexpand&lt;/code&gt; expands repeatedly until the form is no longer a macro call.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(macroexpand-1 &#39;(when true 42))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>map</title>
      <link>https://www.ale-lang.org/docstring/map/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/map/</guid>
      <description>&lt;p&gt;Creates a lazy sequence whose elements are the result of applying the provided function to the sequence elements. If more than one sequence is provided, their elements are retrieved in parallel to supply additional arguments to the mapped function. Mapping will terminate as soon as any sequence is exhausted.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(map (lambda (x) (\* x 2)) [1 2 3 4])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will return the lazy sequence &lt;em&gt;(2 4 6 8)&lt;/em&gt;. The following example performs mapping in parallel.&lt;/p&gt;</description>
    </item>
    <item>
      <title>mapped?</title>
      <link>https://www.ale-lang.org/docstring/is-mapped/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-mapped/</guid>
      <description>&lt;p&gt;If all forms evaluate to mapped values, then this function will return &lt;em&gt;#t&lt;/em&gt; (true). A mapped value supports keyed lookup through functions like &lt;code&gt;get&lt;/code&gt; and &lt;code&gt;contains?&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(mapped? {:name &amp;quot;bill&amp;quot;} #{:name :age} [1 2 3])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#f&lt;/em&gt; (false) because the third form is a vector.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be mapped.&lt;/p&gt;</description>
    </item>
    <item>
      <title>mapper?</title>
      <link>https://www.ale-lang.org/docstring/is-mapper/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-mapper/</guid>
      <description>&lt;p&gt;If all forms evaluate to mapper values, then this function will return &lt;em&gt;#t&lt;/em&gt; (true). A mapper supports keyed lookup and association operations such as &lt;code&gt;assoc&lt;/code&gt; and &lt;code&gt;dissoc&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(mapper? {:name &amp;quot;bill&amp;quot;} #{:name :age} [1 2 3])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#f&lt;/em&gt; (false) because sets and vectors are not mappers.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be mappers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>multiplication (*)</title>
      <link>https://www.ale-lang.org/docstring/mul/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/mul/</guid>
      <description>&lt;p&gt;Calculates the product of a set of numbers.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(\* 9 10 23)       ;; returns 2070&#xA;(\* 50 12.6 34.8)  ;; returns 21924&#xA;(\*)               ;; returns 1&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>namespaces</title>
      <link>https://www.ale-lang.org/docstring/namespaces/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/namespaces/</guid>
      <description>&lt;p&gt;These forms work with Ale namespaces. &lt;code&gt;define-namespace&lt;/code&gt; creates and populates a namespace. &lt;code&gt;import&lt;/code&gt; brings public names from another namespace into scope, either all at once or through explicit names and aliases. &lt;code&gt;declared&lt;/code&gt; returns the names declared in the current or specified namespace.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define-namespace demo&#xA;  (define answer 42))&#xA;(import demo answer)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>not</title>
      <link>https://www.ale-lang.org/docstring/not/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/not/</guid>
      <description>&lt;p&gt;Return &lt;em&gt;#f&lt;/em&gt; (false) if the provided &lt;em&gt;form&lt;/em&gt; is truthy, otherwise will return &lt;em&gt;#t&lt;/em&gt; (true).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(not &amp;quot;hello&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will return the boolean &lt;em&gt;#f&lt;/em&gt; (false) because the value &lt;em&gt;&amp;ldquo;hello&amp;rdquo;&lt;/em&gt; is truthy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>not equal to (!=)</title>
      <link>https://www.ale-lang.org/docstring/neq/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/neq/</guid>
      <description></description>
    </item>
    <item>
      <title>nth</title>
      <link>https://www.ale-lang.org/docstring/nth/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/nth/</guid>
      <description>&lt;p&gt;Returns the value that can be found at the specified index of its sequence. If the index is out of the bounds of the sequence, then either the default value is returned or an error is raised. Keep in mind that indexes are zero-based.&lt;/p&gt;&#xA;&lt;p&gt;If the sequence is lazily computed, asynchronous, or otherwise incapable of indexed lookup, this function will raise an error. To perform a brute-force lookup, use the &lt;code&gt;nth!&lt;/code&gt; function, keeping in mind that it may never return a result.&lt;/p&gt;</description>
    </item>
    <item>
      <title>null?</title>
      <link>https://www.ale-lang.org/docstring/is-null/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-null/</guid>
      <description>&lt;p&gt;If all forms evaluate to null (empty list), then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first non-null will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(null? &#39;(1 2 3 4) &#39;())&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#f&lt;/em&gt; (false) because the first form is a list.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be null.&lt;/p&gt;</description>
    </item>
    <item>
      <title>object</title>
      <link>https://www.ale-lang.org/docstring/object/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/object/</guid>
      <description>&lt;p&gt;Create a new object (hash-map) based on the provided key-value pairs, or return an empty object if no forms are provided. This function is no different from the object literal syntax except that it can be treated in a first-class fashion.&lt;/p&gt;&#xA;&lt;p&gt;An object can be iterated over as a sequence. The resulting sequence is guaranteed to have no duplicated keys, but is not guaranteed to return in any particular order.&lt;/p&gt;</description>
    </item>
    <item>
      <title>object?</title>
      <link>https://www.ale-lang.org/docstring/is-object/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-object/</guid>
      <description>&lt;p&gt;If all forms evaluate to an object (hash-map), then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first non-object will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(object? {:name &amp;quot;bill&amp;quot;} {:name &amp;quot;peggy&amp;quot;} [1 2 3])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#f&lt;/em&gt; (false) because the third form is a vector.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be objects.&lt;/p&gt;</description>
    </item>
    <item>
      <title>or</title>
      <link>https://www.ale-lang.org/docstring/or/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/or/</guid>
      <description>&lt;p&gt;Evaluate forms from left to right. As soon as one evaluates to a truthy value, will return that value. Otherwise, it will proceed to evaluate the next form.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(or (+ 1 2 3)&#xA;    false&#xA;    &amp;quot;not returned&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Will return &lt;em&gt;6&lt;/em&gt;, never evaluating &lt;code&gt;false&lt;/code&gt; (false) and &lt;code&gt;&amp;quot;not returned&amp;quot;&lt;/code&gt;, whereas:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(or false&#xA;    &#39;()&#xA;    &amp;quot;returned&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Will return the string &lt;em&gt;&amp;ldquo;returned&amp;rdquo;&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>partial</title>
      <link>https://www.ale-lang.org/docstring/partial/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/partial/</guid>
      <description>&lt;p&gt;Returns a new function whose initial arguments are pre-bound to those provided. When that function is invoked, any provided arguments will simply be appended to the pre-bound arguments before calling the original function.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define plus10 (partial + 4 6))&#xA;(plus10 9)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;19&lt;/em&gt; as though &lt;code&gt;(+ 4 6 9)&lt;/code&gt; were called.&lt;/p&gt;</description>
    </item>
    <item>
      <title>partition</title>
      <link>https://www.ale-lang.org/docstring/partition/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/partition/</guid>
      <description>&lt;p&gt;Partition a sequence into groups of &lt;em&gt;count&lt;/em&gt; elements, incrementing by the number of elements defined in &lt;em&gt;step&lt;/em&gt; (or &lt;em&gt;count&lt;/em&gt; if &lt;em&gt;step&lt;/em&gt; is not provided).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(seq-&amp;gt;list (partition 2 3 [1 2 3 4 5 6 7 8 9 10]))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;((1 2) (4 5) (7 8) (10))&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>predicates</title>
      <link>https://www.ale-lang.org/docstring/predicates/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/predicates/</guid>
      <description>&lt;p&gt;These predicates test values for specific types or properties. Each predicate has a corresponding negated version prefixed with &amp;ldquo;!&amp;rdquo;. For example, &lt;code&gt;number?&lt;/code&gt; tests if a value is a number, while &lt;code&gt;!number?&lt;/code&gt; tests if it is not a number.&lt;/p&gt;&#xA;&lt;h4 id=&#34;examples&#34;&gt;Examples&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;;; Type checking&#xA;(number? 42)     ; -&amp;gt; #t&#xA;(boolean? true)  ; -&amp;gt; #t&#xA;(symbol? &#39;abc)   ; -&amp;gt; #t&#xA;(procedure? +)   ; -&amp;gt; #t&#xA;&#xA;;; Value properties&#xA;(nan? (/ 0.0 0))  ; -&amp;gt; #t&#xA;(inf? +inf)       ; -&amp;gt; #t&#xA;(-inf? -inf)      ; -&amp;gt; #t&#xA;(even? 2)         ; -&amp;gt; #t&#xA;(odd? 3)          ; -&amp;gt; #t&#xA;&#xA;;; Sequences&#xA;(pair? &#39;(1 . 2))         ; -&amp;gt; #t&#xA;(appendable? [1 2 3])    ; -&amp;gt; #t ; vectors are appendable&#xA;(reversible? [1 2 3])    ; -&amp;gt; #t ; vectors can be reversed&#xA;(!appendable? &#39;(1 2 3))  ; -&amp;gt; #t ; lists are not appendable&#xA;&#xA;;; Symbols&#xA;(local? &#39;x)         ; -&amp;gt; #t ; for non-qualified symbols&#xA;(qualified? &#39;ns/x)  ; -&amp;gt; #t ; for namespace-qualified symbols&#xA;&#xA;;; Special forms and macros&#xA;(special? lambda)  ; -&amp;gt; #t  ; lambda is a special form&#xA;(macro? when)      ; -&amp;gt; #t  ; when is a macro&#xA;&#xA;;; Promise state&#xA;(define p (delay (+ 1 2)))&#xA;(resolved? p)  ; -&amp;gt; #f  ; not yet computed&#xA;(force p)&#xA;(resolved? p)  ; -&amp;gt; #t  ; now computed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Note that each negated predicate (&lt;code&gt;!predicate?&lt;/code&gt;) returns the opposite of its corresponding positive predicate. For example, &lt;code&gt;(!even? 3)&lt;/code&gt; is equivalent to &lt;code&gt;(not (even? 3))&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>printing</title>
      <link>https://www.ale-lang.org/docstring/print/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/print/</guid>
      <description>&lt;p&gt;These functions print space-separated values to &lt;code&gt;*out*&lt;/code&gt;. &lt;code&gt;print&lt;/code&gt; and &lt;code&gt;println&lt;/code&gt; use the regular string conversion. &lt;code&gt;pr&lt;/code&gt; and &lt;code&gt;prn&lt;/code&gt; use reader-oriented output via &lt;code&gt;str!&lt;/code&gt;. &lt;code&gt;println&lt;/code&gt; and &lt;code&gt;prn&lt;/code&gt; append a trailing newline.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(println &amp;quot;hello&amp;quot; 42)&#xA;(prn {:name &amp;quot;ale&amp;quot;})&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>promise?</title>
      <link>https://www.ale-lang.org/docstring/is-promise/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-promise/</guid>
      <description>&lt;p&gt;If all forms evaluate to a promise, then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first non-promise will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define p1 (delay &amp;quot;one&amp;quot;))&#xA;(define p2 (delay &amp;quot;two&amp;quot;))&#xA;(promise? p1 p2 [1 2 3])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#f&lt;/em&gt; (false) because the third form is a vector.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be promises.&lt;/p&gt;</description>
    </item>
    <item>
      <title>quote</title>
      <link>https://www.ale-lang.org/docstring/quote/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/quote/</guid>
      <description>&lt;p&gt;Meaning that lists and symbols will not be evaluated. This macro is effectively the same as prepending an expression with an apostrophe (&lt;em&gt;&amp;rsquo;&lt;/em&gt;).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(quote (1 2 3 4))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will return the literal list rather than trying to apply the number 1, as if it were a function. It is synonymous with the expression &lt;code&gt;&#39;(1 2 3 4)&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>raise</title>
      <link>https://www.ale-lang.org/docstring/raise/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/raise/</guid>
      <description>&lt;p&gt;Converts its arguments to a string and raises the resulting value as an error.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(raise &amp;quot;unexpected value: &amp;quot; 42)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>range</title>
      <link>https://www.ale-lang.org/docstring/range/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/range/</guid>
      <description>&lt;p&gt;Creates a lazy sequence that presents the numbers from &lt;em&gt;min&lt;/em&gt; (inclusive) to &lt;em&gt;max&lt;/em&gt; (exclusive), by &lt;em&gt;increment&lt;/em&gt;. All parameters are optional. &lt;em&gt;min&lt;/em&gt; defaults to &lt;em&gt;0&lt;/em&gt;, &lt;em&gt;max&lt;/em&gt; defaults to &lt;em&gt;*pos-inf*&lt;/em&gt;, and &lt;em&gt;step&lt;/em&gt; defaults to &lt;em&gt;1&lt;/em&gt;. If only one argument is provided, it is treated as &lt;em&gt;max&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(seq-&amp;gt;vector (take 5 (range 10 inf 5)))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Will return the vector &lt;em&gt;[10 15 20 25 30]&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>read</title>
      <link>https://www.ale-lang.org/docstring/read/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/read/</guid>
      <description></description>
    </item>
    <item>
      <title>recover</title>
      <link>https://www.ale-lang.org/docstring/recover/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/recover/</guid>
      <description>&lt;p&gt;Invokes the zero-argument procedure &lt;code&gt;body&lt;/code&gt;. If evaluation raises or panics, the runtime normalizes the error and passes the resulting Ale value to the single-argument procedure &lt;code&gt;rescue&lt;/code&gt;. This is the procedural building block used by higher-level error macros such as &lt;code&gt;try&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(recover&#xA;  (thunk (raise &amp;quot;boom&amp;quot;))&#xA;  (lambda (err) (str &amp;quot;caught: &amp;quot; err)))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>reduce</title>
      <link>https://www.ale-lang.org/docstring/reduce/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/reduce/</guid>
      <description>&lt;p&gt;Iterates over a set of sequence, reducing their elements to a single resulting value. The function provided must take two arguments. The first and second sequence elements encountered are the initial values applied to that function. Thereafter, the result of the previous calculation is used as the first argument, while the next element is used as the second argument.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(reduce + 5 (range 1 11))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will return the value &lt;em&gt;60&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>remainder (mod)</title>
      <link>https://www.ale-lang.org/docstring/mod/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/mod/</guid>
      <description>&lt;p&gt;Takes a set of numbers and calculates the collective remainder of dividing each by the next.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(mod 10 3)      ;; returns 1&#xA;(mod 20 7.0 4)  ;; returns 2.0&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>reverse</title>
      <link>https://www.ale-lang.org/docstring/reverse/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/reverse/</guid>
      <description>&lt;p&gt;&lt;code&gt;reverse&lt;/code&gt; requires a reversible sequence. &lt;code&gt;reverse!&lt;/code&gt; will reverse reversible sequences directly, and otherwise materialize the sequence before reversing it.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(reverse [1 2 3 4])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example returns &lt;code&gt;[4 3 2 1]&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>seq</title>
      <link>https://www.ale-lang.org/docstring/seq/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/seq/</guid>
      <description>&lt;p&gt;Attempt to convert the provided form to a sequence if it isn&amp;rsquo;t already. If the form cannot be converted, or if the resulting sequence is empty, the empty list will be returned.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(when-let [s (seq &amp;quot;hello&amp;quot;)]&#xA;  (seq-&amp;gt;vector (map (lambda (x) (str x &amp;quot;-&amp;quot;)) s)))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;[&amp;ldquo;h-&amp;rdquo; &amp;ldquo;e-&amp;rdquo; &amp;ldquo;l-&amp;rdquo; &amp;ldquo;l-&amp;rdquo; &amp;ldquo;o-&amp;rdquo;]&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>seq-&gt;list</title>
      <link>https://www.ale-lang.org/docstring/seq-to-list/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/seq-to-list/</guid>
      <description>&lt;p&gt;Concatenate a set of sequences into a list. Unlike the standard &lt;code&gt;concat&lt;/code&gt; function, which is lazily computed, the result of this function will be materialized immediately.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x [1 2 3 4])&#xA;(define y&#xA;  (map (lambda (x) (+ x 4))&#xA;  &#39;(1 2 3 4)))&#xA;(seq-&amp;gt;list x y)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>seq-&gt;object</title>
      <link>https://www.ale-lang.org/docstring/seq-to-object/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/seq-to-object/</guid>
      <description>&lt;p&gt;Concatenate a set of sequences into an object (hash-map). Unlike the standard &lt;code&gt;concat&lt;/code&gt; function, which is lazily computed, the result of this function will be materialized immediately.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x [:name &amp;quot;ale&amp;quot; :age 0.3])&#xA;(define y &#39;(:weight &amp;quot;light&amp;quot;))&#xA;(seq-&amp;gt;object x y)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>seq-&gt;set</title>
      <link>https://www.ale-lang.org/docstring/seq-to-set/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/seq-to-set/</guid>
      <description>&lt;p&gt;Concatenates one or more sequences into a set. Duplicate values collapse to a single member.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(seq-&amp;gt;set [1 2] &#39;(2 3))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example returns &lt;code&gt;#{1 2 3}&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>seq-&gt;vector</title>
      <link>https://www.ale-lang.org/docstring/seq-to-vector/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/seq-to-vector/</guid>
      <description>&lt;p&gt;Concatenate a set of sequences into a vector. Unlike the standard &lt;code&gt;concat&lt;/code&gt; function, which is lazily computed, the result of this function will be materialized immediately.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x&#xA;  (map (lambda (x) (\* x 2))&#xA;  &#39;(1 2 3 4)))&#xA;(seq-&amp;gt;vector &#39;(1 2 3 4) x)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>seq!</title>
      <link>https://www.ale-lang.org/docstring/seq-bang/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/seq-bang/</guid>
      <description>&lt;p&gt;Returns &lt;code&gt;value&lt;/code&gt; when it can act as a non-empty sequence. If &lt;code&gt;value&lt;/code&gt; is a sequence but empty, returns &lt;em&gt;#f&lt;/em&gt;. If &lt;code&gt;value&lt;/code&gt; cannot act as a sequence at all, an error is raised.&lt;/p&gt;</description>
    </item>
    <item>
      <title>seq?</title>
      <link>https://www.ale-lang.org/docstring/is-seq/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-seq/</guid>
      <description>&lt;p&gt;If all forms evaluate to a valid sequence, then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first non-sequence will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(seq? &#39;(1 2 3 4) [5 6 7 8])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#t&lt;/em&gt; (true).&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be valid sequences.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sequence combinators</title>
      <link>https://www.ale-lang.org/docstring/sequence-combinators/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/sequence-combinators/</guid>
      <description>&lt;p&gt;These helpers build or transform sequences. &lt;code&gt;zip&lt;/code&gt; groups aligned values into lists and stops when the shortest input ends. &lt;code&gt;mapcat&lt;/code&gt; maps, then lazily concatenates the mapped results. &lt;code&gt;cartesian-product&lt;/code&gt; produces every combination across the provided sequences. &lt;code&gt;map!&lt;/code&gt; eagerly maps into a list. &lt;code&gt;take-while&lt;/code&gt; lazily consumes values while a predicate stays true.&lt;/p&gt;</description>
    </item>
    <item>
      <title>set</title>
      <link>https://www.ale-lang.org/docstring/set/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/set/</guid>
      <description>&lt;p&gt;Creates a persistent set containing unique values. Set literals can also be written with &lt;code&gt;#{...}&lt;/code&gt; reader syntax.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(set 1 2 2 3)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example returns &lt;code&gt;#{1 2 3}&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>set?</title>
      <link>https://www.ale-lang.org/docstring/is-set/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-set/</guid>
      <description>&lt;p&gt;If all forms evaluate to sets, this function returns &lt;em&gt;#t&lt;/em&gt; (true). Otherwise it returns &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(set? #{1 2 3} (set 4 5 6))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>some first (some-&gt;)</title>
      <link>https://www.ale-lang.org/docstring/thread-some-first/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/thread-some-first/</guid>
      <description>&lt;p&gt;Like &lt;code&gt;-&amp;gt;&lt;/code&gt;, but returns the empty list as soon as any form evaluates as such.&lt;/p&gt;</description>
    </item>
    <item>
      <title>some last (some-&gt;&gt;)</title>
      <link>https://www.ale-lang.org/docstring/thread-some-last/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/thread-some-last/</guid>
      <description>&lt;p&gt;Like &lt;code&gt;-&amp;gt;&amp;gt;&lt;/code&gt;, but returns the empty list as soon as any form evaluates as such.&lt;/p&gt;</description>
    </item>
    <item>
      <title>spawn</title>
      <link>https://www.ale-lang.org/docstring/spawn/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/spawn/</guid>
      <description>&lt;p&gt;Starts an actor-like process whose function receives a mailbox sequence. The returned value is a sender procedure that can emit messages into that mailbox. The default mailbox size is &lt;code&gt;16&lt;/code&gt;. If a &lt;code&gt;monitor&lt;/code&gt; procedure is provided, it is used to handle raised values from the actor body.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define send&#xA;  (spawn (lambda (mailbox) (first mailbox))))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>special</title>
      <link>https://www.ale-lang.org/docstring/special/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/special/</guid>
      <description>&lt;p&gt;Constructs a compiler special form directly from parameter cases and assembler instructions. This is the low-level mechanism used to define forms such as &lt;code&gt;if&lt;/code&gt;, and is mainly useful for core language implementation work rather than regular user code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>str</title>
      <link>https://www.ale-lang.org/docstring/str/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/str/</guid>
      <description>&lt;p&gt;Creates a new string from the stringified values of the provided forms.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(str &amp;quot;hello&amp;quot; [1 2 3 4])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return the string &lt;em&gt;&amp;ldquo;hello[1 2 3 4]&amp;rdquo;&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;reader-strings&#34;&gt;Reader Strings&lt;/h4&gt;&#xA;&lt;p&gt;Alternatively, one can use the &lt;code&gt;str!&lt;/code&gt; function to produce a stringified version that &lt;em&gt;may&lt;/em&gt; be able to be read by the Ale reader.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(str! &amp;quot;hello&amp;quot; [1 2 3 4])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return the string &lt;em&gt;&amp;quot;&amp;quot;hello&amp;quot; [1 2 3 4]&amp;quot;&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>str?</title>
      <link>https://www.ale-lang.org/docstring/is-string/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-string/</guid>
      <description>&lt;p&gt;If all forms evaluate to string, then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first non-string will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(string? &#39;(1 2 3 4) &amp;quot;hello&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#f&lt;/em&gt; (false) because the first form is a list.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be strings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>subtraction (-)</title>
      <link>https://www.ale-lang.org/docstring/sub/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/sub/</guid>
      <description>&lt;p&gt;Takes a set of numbers and calculates their collective difference.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(- 50 35 6)  ;; returns 9&#xA;(- 12 3.5)   ;; returns 8.5&#xA;(- 6)        ;; returns -6&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>sym</title>
      <link>https://www.ale-lang.org/docstring/sym/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/sym/</guid>
      <description>&lt;p&gt;Convert the provided string into a symbol. Both qualified and local symbols are accepted.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define hello-sym (sym &amp;quot;hello&amp;quot;))&#xA;(eq hello-sym &#39;hello)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#t&lt;/em&gt; (true).&lt;/p&gt;</description>
    </item>
    <item>
      <title>syntax-quote</title>
      <link>https://www.ale-lang.org/docstring/syntax-quote/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/syntax-quote/</guid>
      <description>&lt;p&gt;Quotes a form while resolving symbols hygienically. Within a syntax-quoted form, &lt;code&gt;unquote&lt;/code&gt; and &lt;code&gt;unquote-splicing&lt;/code&gt; can inject evaluated values.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(let [x 99]&#xA;  `(list ,x))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>take</title>
      <link>https://www.ale-lang.org/docstring/take/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/take/</guid>
      <description>&lt;p&gt;Return a lazy sequence of either &lt;em&gt;count&lt;/em&gt; or fewer elements from the beginning of the provided sequence. If the source sequence is shorter than the requested count, the resulting sequence will be truncated.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x &#39;(1 2 3 4))&#xA;(define y [5 6 7 8])&#xA;(take 6 (concat x y))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return the lazy sequence &lt;em&gt;(1 2 3 4 5 6)&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>thread first (-&gt;)</title>
      <link>https://www.ale-lang.org/docstring/thread-first/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/thread-first/</guid>
      <description>&lt;p&gt;Evaluates &lt;em&gt;expr&lt;/em&gt; and threads it through the supplied forms as their first argument. Any form that is not already a function call will be converted into one before threading.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(-&amp;gt; 0 (+ 10) (\* 2) (/ 5))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Will expand to &lt;code&gt;(/ (\* (+ 0 10) 2) 5)&lt;/code&gt; and return &lt;em&gt;4&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>thread last (-&gt;&gt;)</title>
      <link>https://www.ale-lang.org/docstring/thread-last/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/thread-last/</guid>
      <description>&lt;p&gt;Evaluates &lt;em&gt;expr&lt;/em&gt; and threads it through the supplied forms as their last argument. Any form that is not already a function call will be converted into one before threading.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(-&amp;gt;&amp;gt; 0 (+ 10) (\* 2) (/ 5.0))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Will expand to &lt;code&gt;(/ 5.0 (\* 2 (+ 10 0)))&lt;/code&gt; and return &lt;em&gt;0.25&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>time</title>
      <link>https://www.ale-lang.org/docstring/time/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/time/</guid>
      <description>&lt;p&gt;Evaluates the provided forms, prints the elapsed duration to standard output, and returns the value of the final form. Durations under &lt;code&gt;1000&lt;/code&gt; are printed in nanoseconds; longer durations are printed in milliseconds.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(time (+ 1 2 3))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>true?</title>
      <link>https://www.ale-lang.org/docstring/is-true/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-true/</guid>
      <description>&lt;p&gt;If all forms evaluate to true (&lt;em&gt;#t&lt;/em&gt;), then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first non-true will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(true? (&amp;gt; 3 2) (&amp;lt; 5 10) (and #t #f))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#f&lt;/em&gt; (false) because the last form evaluates to &lt;em&gt;#f&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be true. This is equivalent to the &lt;em&gt;false?&lt;/em&gt; predicate.&lt;/p&gt;</description>
    </item>
    <item>
      <title>try/catch</title>
      <link>https://www.ale-lang.org/docstring/try/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/try/</guid>
      <description>&lt;p&gt;Evaluate the provided forms, immediately short-circuiting if an error is raised, at which point control is passed into the first &lt;code&gt;catch&lt;/code&gt; clause whose &lt;code&gt;predicate&lt;/code&gt; evaluates to &lt;em&gt;#t&lt;/em&gt; (true). If a &lt;code&gt;finally&lt;/code&gt; clause is defined, control will be passed into it after a successful evaluation of the provided forms or after a &lt;code&gt;catch&lt;/code&gt; clause is evaluated.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;catch-clause&lt;/code&gt; is defined as &lt;code&gt;(catch [name predicate] form*)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;finally-clause&lt;/code&gt; is defined as &lt;code&gt;(finally form*)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(try&#xA;  (raise &amp;quot;hello!&amp;quot;)&#xA;  (println &amp;quot;won&#39;t reach me&amp;quot;)&#xA;  (catch [n inf?] (println &amp;quot;won&#39;t match me&amp;quot;))&#xA;  (catch [s str?] (println &amp;quot;was a string -&amp;gt;&amp;quot; s))&#xA;  (finally (println &amp;quot;done&amp;quot;)))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will print the following to the console.&lt;/p&gt;</description>
    </item>
    <item>
      <title>type helpers</title>
      <link>https://www.ale-lang.org/docstring/type-helpers/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/type-helpers/</guid>
      <description>&lt;p&gt;These helpers work with Ale types. &lt;code&gt;assert-type&lt;/code&gt; returns &lt;code&gt;value&lt;/code&gt; when it matches &lt;code&gt;type&lt;/code&gt;, otherwise it raises. &lt;code&gt;is-a&lt;/code&gt; looks up the predicate for a builtin type keyword and applies it to &lt;code&gt;value&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(assert-type :number 42)&#xA;(is-a :string &amp;quot;hello&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>utility helpers</title>
      <link>https://www.ale-lang.org/docstring/utilities/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/utilities/</guid>
      <description>&lt;p&gt;These are small utility forms used throughout Ale programs. &lt;code&gt;identity&lt;/code&gt; returns its argument unchanged. &lt;code&gt;constantly&lt;/code&gt; returns a function that always yields the same value. &lt;code&gt;no-op&lt;/code&gt; ignores its arguments and returns &lt;code&gt;null&lt;/code&gt;. &lt;code&gt;thunk&lt;/code&gt; wraps forms in a zero-argument function.&lt;/p&gt;</description>
    </item>
    <item>
      <title>vector</title>
      <link>https://www.ale-lang.org/docstring/vector/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/vector/</guid>
      <description>&lt;p&gt;Create a new vector whose elements are the evaluated forms provided. This function is no different from the vector literal syntax except that it can be treated in a first-class fashion.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x &amp;quot;hello&amp;quot;)&#xA;(define y &amp;quot;there&amp;quot;)&#xA;(vector x y)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>vector?</title>
      <link>https://www.ale-lang.org/docstring/is-vector/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-vector/</guid>
      <description>&lt;p&gt;If all forms evaluate to a vector, then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first non-vector will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(vector? &#39;(1 2 3 4) [5 6 7 8])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#f&lt;/em&gt; (false) because the first form is a list.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be vectors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>when</title>
      <link>https://www.ale-lang.org/docstring/when/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/when/</guid>
      <description>&lt;p&gt;If the evaluated predicate is truthy (not &lt;em&gt;#f&lt;/em&gt; (false) or the empty list), the forms are evaluated. Will evaluate each form in turn, returning the final evaluation as its result.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(define x &#39;(1 2 3 4 5 6 7 8))&#xA;&#xA;(when (&amp;gt; (length x) 3)&#xA;  (println &amp;quot;x is big&amp;quot;)&#xA;  (length x))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If the symbol &lt;code&gt;when-not&lt;/code&gt; is used instead of &lt;code&gt;when&lt;/code&gt;, then the predicate is evaluated and the block will be evaluated only if the result is not truthy&lt;/p&gt;</description>
    </item>
    <item>
      <title>with-open</title>
      <link>https://www.ale-lang.org/docstring/with-open/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/with-open/</guid>
      <description>&lt;p&gt;Binds one or more values and ensures their &lt;code&gt;:close&lt;/code&gt; procedures are called after the body finishes, even if an error is raised. If a bound value does not expose a callable &lt;code&gt;:close&lt;/code&gt;, cleanup for that binding becomes a no-op.&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(with-open [r (:some-resource factory)]&#xA;  (: r :read))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>zero?</title>
      <link>https://www.ale-lang.org/docstring/is-zero/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.ale-lang.org/docstring/is-zero/</guid>
      <description>&lt;p&gt;If all forms evaluate to zero (0, 0.0, or 0/x), then this function will return &lt;em&gt;#t&lt;/em&gt; (true). The first non-zero will result in the function returning &lt;em&gt;#f&lt;/em&gt; (false).&lt;/p&gt;&#xA;&lt;h4 id=&#34;an-example&#34;&gt;An Example&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-scheme&#34;&gt;(zero? (- 3 2 1) 0 0/1 (/ 3 3))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This example will return &lt;em&gt;#f&lt;/em&gt; (false) because the last form evaluates to &lt;em&gt;1&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Like most predicates, this function can also be negated by prepending the &lt;code&gt;!&lt;/code&gt; character. This means that all the provided forms must not be zero.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
