For wildcards you can use symbol-macrolet from tools.macro

(macro/symbol-macrolet [_ (lvar)]
   (all
    (== [_ _ [_ _ 'milk _ _] _ _] hs)
    ....))


On Sat, Nov 5, 2011 at 1:24 PM, Ambrose Bonnaire-Sergeant <
abonnaireserge...@gmail.com> wrote:

> I gave the wildcard requirement a bit of thought, no inspiration at the
> moment.
>
> Maybe someone else can suggest a strategy.
>
> Ambrose
>
>
> On Sun, Nov 6, 2011 at 1:14 AM, Ambrose Bonnaire-Sergeant <
> abonnaireserge...@gmail.com> wrote:
>
>> Hey Michael,
>>
>> Here's a solution using core.logic.
>>
>> ;; We can define a "permission" relation with "defrel".
>>
>> (defrel permission roles ops state)
>>
>> ;; and a helper function to add each combination of permissions
>>
>> (defn add-permision [roles ops states]
>>   (for [r roles
>>         o ops
>>         s states]
>>     (fact permission r o s)))
>>
>> ;; Here is your first example
>>
>> (add-permision #{:admin :operator} #{:reject :accept} #{:applied})
>>
>> ;; Now lets ask what are the permissions for the :admin role
>>
>> logic-introduction.perm=> (run* [q]
>>                                 (fresh [ops states]
>>                                        (permission :admin ops states)
>>                                        (== q [ops states])))
>> ([:reject :applied] [:accept :applied])
>>
>> ;; Ask what permissions either a :admin or :operator role has
>>
>> logic-introduction.perm=> (run* [q]
>>                                 (fresh [role ops states]
>>                                        (conde
>>                                          ((== role :admin))
>>                                          ((== role :operator)))
>>                                        (== q [ops states])
>>                                        (permission role ops states)))
>> ([:reject :applied] [:accept :applied] [:reject :applied] [:accept
>> :applied])
>>
>>
>> Thanks,
>> Ambrose
>>
>> On Sun, Nov 6, 2011 at 12:51 AM, Michael Jaaka <
>> michael.ja...@googlemail.com> wrote:
>>
>>> Hi,
>>>
>>> I would like to use logic programing to describe permissions. The
>>> definition is
>>>
>>> We have set of triples which looks like:
>>> Set of roles; set of operations; set of states
>>>
>>> Triples are defined in scope of some entity with states, wildcard is
>>> defined with _
>>>
>>> All I need is to answer on some operation invocation if given user
>>> with his role is able to execute that operation for particular entity
>>> which is in one of its states
>>>
>>> Example:
>>> Roles: admin, operator, auditor
>>> Entity: data form with states dirty, applied, rejected, executed
>>> Operations on data form: reject, acept, list, enter
>>> Triples of permissions:
>>> admin, operator; reject, accept; applied
>>> auditor, operator; list; _
>>> operator; enter; dirty
>>>
>>> The additional question beside checking permission is:
>>> What are operations avaiable for given role and given state of entity
>>>
>>>
>>> Any thoughts? Maybe core.logic? It seems that I know its purpose but
>>> don't know how to use it.
>>> Thanks in advance.
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clojure@googlegroups.com
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+unsubscr...@googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/group/clojure?hl=en
>>
>>
>>
>  --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to