- #31 Unicode alias for lambda
- Current draft includes `λ` and `case-λ` as aliases, but these can be very easily removed if there is no consensus
- other Unicode aliases not on-topic at this meeting
I am (strongly) opposed to this for a number of reasons:
- #203 `letrec-values` and `letrec*-values`
- Current draft includes these, can be easily removed if there is no consensus
- #205 Returning multiple values to a procedure call subform
- dpk doesn’t like what the current draft says, but is editorially a bit hemmed in
- Vote on Stygian Blue was for status quo, so this issue is partly editorial
I am strongly in favour of leaving the way open for future standards (if not this one) to make it a violation if, in a single-value context, more than one value is received. If we can't agree on that, we should at least make sure that such a decision would not be blocked in the future.
From a purity point of view, the clear answer is that silently dropping produced values would be analogous to dropping extra procedure arguments (because in the case of values, the procedure in question is the current continuation), and we don't do that.
- #186 Practically unbounded non-tail recursion
- [Currently in draft as a ‘should’](https://codeberg.org/scheme/r7rs/src/commit/edc445915443eed1cef16d29be88cc05a8411328/fascicles/procedural-fascicle.txt#L539), can be removed, can be changed to ‘must’
I don't think that the language is precise enough; this should be left out for the moment. A specification should be written and discussed outside the draft, and only be integrated when it is ready. Specifying the PTC guarantee of Scheme needed a paper by Will Clinger, for example.
- #104 Allowing mixing definitions and expressions in any order
Let us use the time of the meeting to explain and discuss this, but let us postpone any votes on this. This will need some thinking by everyone. If we can't find a unanimous solution, we should be conservative here.
- #154 Clearer definition of a procedure location tag
- Is the current definition satisfactory? [Definition as part of the description of procedures](https://codeberg.org/scheme/r7rs/src/commit/edc445915443eed1cef16d29be88cc05a8411328/fascicles/procedural-fascicle.txt#L200), [`lambda` and by implication `case-lambda`](https://codeberg.org/scheme/r7rs/src/commit/edc445915443eed1cef16d29be88cc05a8411328/fascicles/procedural-fascicle.txt#L742), [`eq?`/`eqv?`/`equal?`](https://codeberg.org/scheme/r7rs/src/commit/edc445915443eed1cef16d29be88cc05a8411328/fascicles/procedural-fascicle.txt#L1991)
I vote for the removal of this concept and following R6RS here, especially when we have procedures with actual tags (as true Scheme objects) in the new standard. One never gets a satisfying equivalence relation for procedures for two reasons: the compiler is free to merge two identical lambda objects into one, and it is undecidable whether two procedures behave equivalently.
\#154 I agree with Sussman. If you want to map procedures to values using an alist, procedure tags will require an extra overhead: you need to attach a unique object K to each such procedure using a tag and then map each K to a value using the alist, requiring two searches, one through the tags of the procedure and one through the alist. The reason for using an alist is so that n associations can be pushed on the alist and then all popped in O(1) time by keeping a pointer to the original alist.
I wrote a syntax-rule that allows restricting arguments and return
values which enter/leave the body,¹ so I do not think that this
restriction needs to be a feature of the language.
The syntax currently is²
(define-typed (proc args ...) ((ret-valid? ...) arg-valid? ...) body ...)
For example:
(define-typed (proc x y) ((float? float?) float? float?)
(values x y))
¹ more details on https://www.draketo.de/software/guile-define-typed
² I got feedback that using the common types -> ret syntax would be
nicer (and after sleeping on that for a month, I agree, specifically
because of multiple return values, and plan to do that), but the main
point is that it’s already possible with existing core features to add
a verified declaration of the number of return values, so it need not
be an added language feature.
On Thu, Sep 25, 2025 at 2:47 PM Vincent Manis (he/him) <vman...@gmail.com> wrote:
I would point out that λ is being proposed as a synonym, not a
replacement. For me, I press Compose+*+l, and I get λ. I can do this on
a Mac, on Windows, and on Linux. If people don't want a Compose key (I
haven't yet found a good solution on ChromeOS), they can still type
`lambda'. -- vincent
By "Compose" I think you mean the apple keyboard curly-queue thing at the bottom left. My Mom has one of those. But apple products are very uncommon; you won't find them anywhere in "the real world". Standard keyboards have ctrl, fn, windows, alt on the lower left, alt menu ctrl on lower right, and maybe it is possible to map one of those to "compose". And, in this day and age, maybe it should be done, because having to select a language input method from a mouse menu sucks. But until it becomes common-place accepted practice, we're stuck with keyboards that don't have compose keys. This is, in part, a manufacturing problem: the keyboard makers in China have to stop putting that damned useless windows key on everything. It's a linux distro problem: Debian and Ubuntu don't map the windows key to compose.
This is off-topic-ish for the present discussion about scheme, but points at the actual practical barriers that remain that prevent more wide-spread adoption of utf-8 : manufacturing ... distros ...
I haven't seen any of these obstacles. -- vincent
-- Linas
An alternative that was proposed would be used as
(define-typed (proc x y) (float? float? -> float? float?)
(values x y))
On the other hand, this version only uses structure for identification
to avoid using up -> as syntax element. I don’t like adding special
characters to Scheme.
(Lambda (VariableList (Variable "$X") (Variable "$Y")) ; Compute TV = (1-sA*sB, cA*cB) (FloatColumn (Minus (Number 1) (Times (strength-of (Variable "$X")) (strength-of (Variable "$Y")))) (Times (confidence-of (Variable "$X")) (confidence-of (Variable "$Y")))))