[gambit-list] Fatal crash

Marc Feeley feeley at iro.umontreal.ca
Mon Apr 14 23:14:26 EDT 2008


On 14-Apr-08, at 10:53 PM, Marc Feeley wrote:
> It obviously can't be implemented as:
>
> (define (car x)
>   (car x))
>
> Since this is an infinite recursion.  Gambit's implementation of the
> car procedure corresponds roughly to this:
>
> (define (car x)
>
>   (declare (extended-bindings))
>
>   (if (pair? x)
>       (##car x)
>       (error "car expects a pair!")))
>
> The ##car procedure which is called by car is a version of car which
> assumes that the parameter is a pair.  In other words ##car is simply
> an indirection (with offset).

And if you are wondering how the ##car procedure is implemented, then  
it goes roughly like this:

(define (##car x)

   (declare (extended-bindings))

   (##car x))

Note that this is *not* an infinite recursion because the call to  
##car is inlined by the compiler.  This approach is used to define all  
the simple primitive procedures.

Marc




More information about the Gambit-list mailing list