My final solution is this, which works and doesn't use global state: accflag(0x0001, public). accflag(0x0010, final). accflag(0x0020, super). accflag(0x0200, interface). accflag(0x0400, abstract).
access_flags(Value, Output) :- findall(X, flag_check(Value, X), Output). flag_check(Value, Output) :- accflag(B, Output), On is Value /\ B, On > 0. Many thanks to Michał Bieliński for invaluable assistance, well, the answer pretty much, I just have to grok it now! Excellent! :) Sean. On 23 October 2014 00:25, "Michał Bieliński" <mic...@kast.net.pl> wrote: > Dnia 22 Października 2014, 00:54, Śr, emacstheviking napisał: > > I really didn't think this would be so difficult! I have tried for > > several hours now to find an elegant solution to my problem: > > given a 32 bit value, create a list of atoms that represent > > the names of those bit positions of interest. > > Until this point it sounds easy. > > > %% these define the bit positions of interest > > accflag(0x0001, public). > > accflag(0x0010, final). > > accflag(0x0020, super). > > accflag(0x0200, interface). > > accflag(0x0400, abstract). > > Bit positions those are not. They are bit values. > > Those are bit positions: > accflag(0, public). > accflag(4, final). > accflag(5, super). > accflag(9, interface). > accflag(10, abstract). > > > %% predicate to convert Value into a list of accflag/2 names. > > My way: > > access_flags(Value, Output) :- > findall(X, flag_check(Value, X), Output). > > flag_check(Value, Output) :- > accflag(X, Output), > g_assign(z, Value), > g_test_set_bit(z, X). > > > AAARGGGGH! Next month will be my 30th year in software and it > > gets better every day! > > Just out of curiosity, how do you count the time? From your first hello > world? From first year of working as programmer? Something else? > > -- > Michał Bieliński > > > _______________________________________________ > Users-prolog mailing list > Users-prolog@gnu.org > https://lists.gnu.org/mailman/listinfo/users-prolog >
_______________________________________________ Users-prolog mailing list Users-prolog@gnu.org https://lists.gnu.org/mailman/listinfo/users-prolog