This is the mail archive of the guile@cygnus.com mailing list for the guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Scheme is too complicated


On 30 Oct 1998, Russ McManus wrote:

> Jay-
> 
> I'm very sorry that I assumed that you didn't know much Scheme,
> obviously I was wrong.
> 
no, I was a jack-ass to get my back up at what you said.  I'd just settled
down at my desk after some horrific meeting and I was in a bad mood.

I must confess that although I've been studying Scheme for a while now, I
really am a bit rusty at practical Scheme programming; you guessed
correctly.

> > > > In my experience, functional style Scheme code is concise and, unless
> > > > you're careful, slow.  
> > > 
> > > This is an attribute of a particular implementation, not an intrinsic
> > > property of the language.
> > 
> > no, purely functional code is intrinsically slow.
> 
> Hmm.  I think your definition of slow and mine are different.  Could
> you clarify what you mean when you say 'slow'?  How do you account for
> the performance of Stalin?
>

a while back I posted something like this:

hash->keys could be written in Scheme like this

(define entry->key cadr)

(define hash->keys
  (lambda (mytab)
    ;; maybe do some type-checking here
    (let* ((vec (cdr mytab))
           (vec-len (vector-length vec)))
      (do ((keys '())
           (i 0 (+ i 1))
           (bucket (vector-ref vec 0) (vector-ref vec i)))
          ((>= i vec-len) keys)
        (do ((entry-list bucket (cdr entry-list)))
            ((null? entry-list))
          (let* ((entry (car entry-list))
                 (key (entry->key entry)))
            (set! keys (cons key keys))))))))

here's what I would call a functional version:

(define hash->keys
  (lambda (mytab)
    (let ((bucket->keys (lambda (bucket) (map entry->key bucket)))
          (entry->key cadr))
      (apply append (map bucket->keys (vector->list (cdr mytab)))))))

the functional guy is sleek and pretty, but those "vector->list" and
"append" bits are performance killers. 

> -russ
> 
> --
> "C makes it easy to shoot yourself in the foot.  C++ makes it
>  harder, but when you do, it blows away your whole leg."
>              -- Bjarne Stroustrup on C++
>