-- Leo's gemini proxy

-- Connecting to idiomdrottning.org:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini; lang=en

Record destructuring with brev


Since brev’s defines are just me hacking in matchable support in the define headers, and I didn’t know matchable that well at first, I’m always discovering new things that this means for brev’s define.


For example, it’s a match made in heaven when working with records.


(define-record horse leg-count name height)

(define (leg-heightitude ($ horse leg-count name height))
  (* leg-count height))

(map leg-heightitude
     (list
     (make-horse 4 'Tornado 58/12)
     (make-horse 8 'Sleipner 67/12)))

The first symbol after the dollar sign needs to be the record type, but then you can rename the slots; it goes by position, not name. You can omit unused trailing slots:


(define (label ($ horse lc n))
  (conc n ", " lc "-legged horse"))

It’s still a generics define so you can define several different functions for polymorphic dispatch:


(define (label ($ bird name species))
  (conc name " is a pretty bird"))

(map label barrel-of-unsorted-animals)

-- Response ended

-- Page fetched on Fri May 17 10:18:04 2024