Asking introspection
Shiro Kawai
(04 May 2020 21:21 UTC)
|
Re: Asking introspection
John Cowan
(04 May 2020 21:21 UTC)
|
Re: Asking introspection Marc Nieper-Wißkirchen (05 May 2020 06:12 UTC)
|
Re: Asking introspection
Shiro Kawai
(11 May 2020 09:21 UTC)
|
Re: Asking introspection
Lassi Kortela
(11 May 2020 09:25 UTC)
|
Re: Asking introspection
Shiro Kawai
(11 May 2020 09:42 UTC)
|
Re: Asking introspection
Marc Nieper-Wißkirchen
(09 Jun 2020 08:41 UTC)
|
Re: Asking introspection
Marc Nieper-Wißkirchen
(27 Aug 2020 16:03 UTC)
|
Re: Asking introspection
Shiro Kawai
(27 Aug 2020 21:45 UTC)
|
Re: Asking introspection
Marc Nieper-Wißkirchen
(28 Aug 2020 05:30 UTC)
|
John, Shiro, thank you for your comments. I see two ways how to implement what you are asking for. The obvious way would be to specify procedures like (unbox-value <box> <index>) and (box-values-length <box>) that retrieve a single value or return the number of values store, respectively. There is a second way, however, which can also be applied in other situations where multiple values occur. What I am thinking of are special forms not restricted to boxes (but could be applied to, say, the Justs and Rights of SRFI 189 likewise) as follows: (values->vector <expr>) (values-length <expr>) (values->list <expr>) (values-ref <expr> <index>) These are expressions defined as syntax (important because Scheme's applicative syntax doesn't allow multiple values). When they are evaluated, <expr> is evaluated and expected to return values, which are then converted to a vector, a list, etc. Moreover, as this is syntax, an implementation can expand these forms into the most efficient ones. Applied to the case of boxes, instead of "(box-values-length <box>)", we would then have (values-length (unbox box)). Again, as this is syntax, the implementation's expander can expand "(values-length (unbox box))" into some specialized code. In case, you also want to set a single value, the way to go in the second approach is as in SRFI 17: (values-set! <expr> <index> <value>) is a special form that works in a context like "(values-set! (unbox <box>) <index> <value>)". Am Mo., 4. Mai 2020 um 23:22 Uhr schrieb John Cowan <xxxxxx@ccil.org>: > > And also, I think, to retrieve the nth value. > > On Mon, May 4, 2020 at 5:21 PM Shiro Kawai <xxxxxx@gmail.com> wrote: >> >> Can it also have an interface to query how many values a given box is holding? >> Without that, any generic code to deal with boxes must receive the unboxed values >> as a list. Although clever compilers may eliminate construction of intermediate lists >> in some cases, it'll be easier if one can get the information (e.g. one can have fast-path >> for single-valued box, or check the box argument and reject early if the passed box >> has different values than expected.) >>