Also thanks Olivier and Aleix, and now I will have to watch that talk as well.
On Fri, Mar 5, 2021 at 9:40 PM Tim Meehan <btmee...@gmail.com> wrote: > Yes, that makes sense. The unquote is a neat way to fix that. > One of these days, I will learn my lesson. > Thanks Christopher! > > On Fri, Mar 5, 2021 at 6:26 PM Christopher Baines <m...@cbaines.net> > wrote: > >> >> Tim Meehan <btmee...@gmail.com> writes: >> >> > I wanted to store a thunk in a hashtable so that I could look up its key >> > and then run it later. Something like this: >> > >> > #! /usr/bin/guile >> > !# >> > >> > (use-modules (ice-9 hash-table)) >> > >> > (define stuff (alist->hash-table >> > '((a . (lambda () (display "event a\n"))) >> > (b . (lambda () (display "event b\n"))) >> > (c . (lambda () (display "event c\n")))))) >> > >> > (define res (hash-ref stuff 'a)) >> > (res) >> > >> > But when I run it: >> > Wrong type to apply: (lambda () (display "event a\n")) >> >> The lambda bit you've written is quoted. So you're asking Guile to apply >> a list where the first element is the symbol 'lambda, the second is the >> empty list, ... >> >> You probably want something like this, where you're creating a list of >> pairs, where the car of the pair is a symbol, and the cdr is a procedure >> (rather than a list). >> >> (define stuff (alist->hash-table >> `((a . ,(lambda () (display "event a\n"))) >> (b . ,(lambda () (display "event b\n"))) >> (c . ,(lambda () (display "event c\n")))))) >> >> Does that make sense? >> >