functional-programmingschemeclosuressicp# Is there any difference between closure in Scheme and usual closure in other languages?

I'm studying SICP right now. And I found the definition of *closure* in SICP is (maybe) different from closure definition in other languages.

Here's what SICP says:

The ability to create pairs whose elements are pairs is the essence of list structure's importance as a representational tool. We refer to this ability as the closure property of cons. In general, an operation for combining data objects satisfies the closure property if the results of combining things with that operation can themselves be combined using the same operation.

Here closure is more close to closure in Mathematics I think, not what I have seen in JavaScript, which means the ability of a function to access enclosed environment variables.

Am I wrong?

Solution

You're right; this text is not referring to "closures"--an implementation strategy to ensure that functions-as-values refer correctly to lexical bindings--but more generally to the mathematical notion of "closure", as for instance in the statement "the integers are *closed under* the addition operation". That is: applying the operation to any two elements of the set produces a result that is still a member of the set.

- What is the proper way of wrapping an Int (not a general type) in another type if type safety is the only motive?
- Edit(Mutate) object property inside a reducer in NgRx
- When is it right time to throw an exception in functional programming
- Using apply for calculating subscale and total scores across multiple dataframes
- How to implement db capability approach with pure functions in F#?
- Find a pair of integers from an array that sums up to a given number in Java 8 using functionals
- How to join array of optional integers to string?
- Which functions in Array.prototype are pure function in Javascript
- Is this property of a functor stronger than a monad?
- How do I make a minimal working example for the a DBus server?
- unfamiliar syntax in Haskell / Clash function type signature
- How can I write a notification server in Haskell?
- How to debug with PureScript?
- Generic Map function in Golang
- Learning functional/Clojure programming - practical exercises?
- Python functional method of checking that all elements in a list are equal
- javascript fold reduce functional programming
- Typescript types for a pipe() function
- Can you explain closures (as they relate to Python)?
- Zipping streams using JDK8 with lambda (java.util.stream.Streams.zip)
- Unable to understand the strange "where" syntax in Haskell / Clash
- Codensity and ContT
- Python fluent filter, map, etc
- functional programming in python - using map(), filter(), and sum() together - java .stream() equivalent?
- Haskell foldr1 lambda function which adds tuple values
- How can I get the nested keys of a map in clojure?
- How do I use System.Console.ANSI to wrap a String in escape sequences for getting it colored in the terminal?
- Flux.switchIfEmpty - what if it doesn't switch when first Flux is completed?
- Does Raku has a data type for encoding side effects as pure values?
- Does Rust has a data type for encoding side effects as pure values?