This article considers &quot;closure&quot; to mean a type of internal representation of a function which references free bindings which would otherwise be stack-allocated.<p>This goes against the usage of &quot;closure&quot; that I&#x27;ve seen elsewhere, including the current wikipedia page for the topic[1]. Ususally I see &quot;closure&quot; used to denote the concept of a function that references free variables, not any specific implementation. Maybe within the guile codebase they have a construct called &quot;closure&quot; which implements closures in the most general way possible (which involves heap allocation no doubt).<p>But it&#x27;s true: lambdas ≠ closures. &quot;Lambda&quot; refers to the syntax that a language uses to allow anonymous functions. A &quot;closure&quot; is a type of function that references free variables. Java 8, for example, has lambdas, but they are not full closures, because they can only reference local variables declared in higher scopes if those are declared as final.<p>Python, on the other hand, sort of has lambdas, but they are limited to a body consisting of a single expression, which doesn&#x27;t allow e.g. conditionals. Even if it didn&#x27;t support the lambda syntax, though, it would support closures, because it lets you declare a named function during a function call, then pass it elsewhere by referencing its name. These functions can reference free variables:<p><pre><code>    def mkincer():
        n = 0
        def inner():
            nonlocal n
            n += 1
            return n
        return inner
</code></pre>
[1] <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Closure_(computer_programming)" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Closure_(computer_programming)</a>