guile-user
[Top][All Lists]
Advanced

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

ANOUNCEMENT guile imatch - functional dynamic indexed matcher


From: Stefan Israelsson Tampe
Subject: ANOUNCEMENT guile imatch - functional dynamic indexed matcher
Date: Mon, 31 Oct 2016 20:14:22 +0100

This is an anouncement of a functional dynamic match library.

https://gitlab.com/tampe/guile-imatch

If you know of a similar library let me know, atm it is not that advanced
but according to any request I'm able to take this as far as it can
possibly go. This is an initial anouncement and it is pre alpha compillable
and fun.


Here is an exerpt of the README:
---------------------------------------------

USAGE:
1/ put this dir in guile's search path
2/ fire up guile and import ity through
   (use-modules (ice-9 imatch))

-------------------------------------------------------------------------------
A functional matcher and indexed matcher for lare matchers use the index
matcher imatch else for small problem the sequential dmatch

pattern a symbol ?a represents a variable and the rest is atoms list and
vectors.

The emty imatch is imatch-null, the empty dmatch is dmatch-null. We
can add a matcher in front of the structure or at the end. The api for
this is

dmatch <- (append-dmatch  pat lambda dmatch)
dmatch <- (prepend-dmatch pat lambda dmatch)

imatch <- (append-dmatch  pat lambda imatch)
imatch <- (prepend-dmatch pat lambda imatch)

lambd will at a match be fed with the variables defined in a depth first search
in the pattern. To apply the match use it as

(dmatch x dmatch-data #:optional (fail (lambda () (error "dmatch failed"))))
(imatch x imatch-data #:optional (fail (lambda () (error "imatch failed"))))

------------------------------------------------------------------------------

Example:

(define m1 (prepend-imatch '(1  2) (lambda () 'a)             imatch-null))
(define m2 (append-imatch  '(?a 2) (lambda (?a) (list 'b ?a)) m1))

  > (imatch '(1 2) m2)

  'a

  > (imatch '(9 2) m2)

  '(b 9)


reply via email to

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