Re: #\a octothorpe syntax vs SRFI 10 Aubrey Jaffer 02 Jan 2005 04:34 UTC

 | Date: Sat, 01 Jan 2005 01:20:16 -0800
 | From: Per Bothner <xxxxxx@bothner.com>
 |
 | Aubrey Jaffer wrote:
 |
 | > Are there type specifiers in common between Scheme implementations?
 |
 | Not to my knowledge.  But it might be worthwhile looking at Schemes
 | that focus on compilation, including Stalin, Bigloo, and Kawa.
 |
 | Common Lisp is of course has a little mini-language.  The Emacs
 | cl package emulates a subset of the Common Lisp specifiers.
 |
 | > Here is a plan which, using the delimiter you suggested, indicates
 | > signed vs. unsigned with - versus +:
 |
 | I think that's a little too cute.

It cuteness is the only objection anyone makes, I'll take that as
consensus.

 | I think just a single 'u' prefix is enough - and I don't think the
 | hyphen is needed: #nA:integer16 / #na:uinteger16.  Or just use the
 | short "int" instead of "integer" as in #nA:int16 / #nA:uint16.
 | That abbrevation is consistent with C/C++'s stdint.h.  Using a "u"
 | prefix is also used in C#: ushort/ubyte etc.  (Note I'd use the
 | unabbreviated "integer" for unbounded integers.)

The words "signed" and "unsigned" do not occur in R4RS or R5RS;
neither does "int".  Scheme owes nothing to C, except for looking so
fine in comparison.  I have rewritten SRFI-58 to use only Scheme
terminology.  The prospective new SRFI is at:
http://swiss.csail.mit.edu/~jaffer/srfi-58-new.html

 |  > inexact         64.bit real                     #nA:real-64
 |  > inexact         32.bit real                     #nA:real-32
 |
 | These aren't general real numbers, but "inexact real numbers using
 | a floating-point representation."

As discussed earlier, shorter names necessarily omit some of the
numerical attributes.  The fully specified Scheme names would be:

  inexact-IEEE-64-bit-floating-point-complex-array
  inexact-IEEE-32-bit-floating-point-complex-array
  inexact-IEEE-64-bit-floating-point-real-array
  inexact-IEEE-32-bit-floating-point-real-array
  exact-64-bit-integer-array
  exact-32-bit-integer-array
  exact-16-bit-integer-array
  exact-8-bit-integer-array
  exact-64-bit-nonnegative-integer-array
  exact-32-bit-nonnegative-integer-array
  exact-16-bit-nonnegative-integer-array
  exact-8-bit-nonnegative-integer-array
  char-array
  boolean-array
  object-array

 | >                 char (string)                   #nA:char
 |
 | Is that 8-bit chars or implemention-defined chars?

Those are Scheme chars (implementation-defined).  Multi-lingual
implementations might have several sizes seamlessly switched behind
the scenes depending on the characters written into them.

 | One could have #nA:char8, #nA:char16 (Unicode), #nA:char32.

Doesn't Unicode have 22.bits?

 | #nA:char would match an #nA:charW for some implementation-defined
 | W (which I guess might be 7 on a PDP-10 ...).
 |
 | >                 boolean (bit-vector)            #nA:boolean
 |
 | A boolean has values #f and #t.  A bit has values 0 or 1, and
 | is the same as a uint1.

ARRAY-REF of boolean arrays returns booleans.