guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Somehow I have got this "thunk" thing wrong.


From: Christopher Baines
Subject: Re: Somehow I have got this "thunk" thing wrong.
Date: Sat, 06 Mar 2021 00:26:39 +0000
User-agent: mu4e 1.4.15; emacs 27.1

Tim Meehan <btmeehan@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?

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]