On Fri, Aug 14, 2020 at 7:51 AM Alexandre Almosni < alexandre.almo...@gmail.com> wrote:
> Maybe your objects could be defined by a map containing functions and > objects. > > So exampleAndList = {:fn and, :coll [a b c]} > > > And then eval goes through your objects recursively, using > > (def eval [o] > (apply (:fn o) (map eval (:coll o)))) > > - with a special case that if o is not a map but say a Boolean you just > return itself > A slight problem with that approach is that clojure.core/and is not a function, but a macro: the reason being is that it stops evaluating forms as soon as it hits a falsey value (similar for "or"). A smart implementation of And/OrList would like to short-circuit as well I guess, so you'll need to express that somehow. Of the clojure.core library that property is satisfied by transducers: https://clojure.org/reference/transducers#_early_termination Regards, -- Alex On 14 Aug 2020, at 02:24, Jack Park <jackp...@topicquests.org> wrote: > > > The problem: > > In Java, I have an interface *IInferrable* which is basically boolean > eval(); > > Any Java object which extends IInferrable, no matter what it is, will > answer to eval() and return a boolean. > The idea lies at the heart of an inference engine. > > But, I also define a class *AndList* which implements IInferrable and > extends java.util.ArrayList<Inferrable> > > So, AndList, and its sibling OrList behave just like a List object, but > also will answer to eval() by running the collection and dealing with what > each element returns when it, too, is eval()'d. > > I'd really love to discover how to pull that off in Clojure. > > -- 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 unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/CACACo5SqECEzLU-4VBBvB8J6xdi%3DqRpoqLjR4urhq7TBiB3mXA%40mail.gmail.com.