Thanks Alex.

We'll see what I'll manage come up with.


On Sun, Jun 26, 2011 at 2:07 PM, Alexander Burger <a...@software-lab.de>wrote:

> Hi Henrik,
>
> > When it comes to examining arbitrary lists can Pilog be a good (as in
> terse)
> > and fast fit?
>
> I'm not really convinced. My opinion is that Prolog is good at only one
> task: Search with backtracking.
>
> For simple pattern matches, direct Lisp code is usually simpler (and
> faster). With 'member', 'assoc', 'find' or 'pick' for simple cases, and
> 'match' in general.
>
>
> > Take the following list for example: ("one" "two" ("items" "knife" "tent"
> > "hook" "boots") ("key1" "yes") ("key2" "no"))
> >
> > We want to know if all of the following are true or not:
> > 1.) It contains "one".
>
>    (member "one" L)
>   (match '(@A "one" @Z) L)
>
> Note that for match it is advisable to 'use' the variables, i.e.
>
>   (use (@A @Z)
>      (match '(@A "one" @Z) L) )
>
> For simplicity I omit the 'use' in the following examples.
>
>
> > 2.) It contains ("key1" "yes"), i.e. a member of the list is a in itself
> a
> > list with "key1" in the car and "yes" as the second element. If it makes
>
>    (member '("key1" "yes") L)
>   (match '(@A ("key1" "yes") @C) L)
>   (match '(@A ("key1" @B) @C) L)
>
>
> > 3.) It contains a member list with "items" in the car and both "boots"
> and
> > "tent" in the cdr.
>
>       (and
>         (match '(@A ("items" @B) @Z) L)
>         (member "boots" @B)
>         (member "tent" @B) )
>
>      (let? X (assoc "items" L)
>         (and (member "boots" X) (member "tent" X)) )
>
>      (find
>         '((L)
>            (and
>               (= "items" (car L))
>               (member "boots" (cdr L))
>               (member "tent" (cdr L)) ) )
>         L )
>
>
> > ((? "one") (? "key1" "yes") (? "items" "boots" "tent") (! "two"))
> >
> > The last ! there should mean that the list can not contain "two" which
>
> One of the (sub)clauses above could also contain something like
>
>   (not (member "two" X))
>
> Or you can do a deep search
>
>   (not (fish '((X) (= "two" X)) L))
>
> Cheers,
> - Alex
> --
> UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe
>

Reply via email to