Fork me on GitHub
#core-logic
<
2017-07-31
>
norman16:07:31

Not really. Many of the examples out there outdated, and few of them are written by people who have a strong understanding of core.logic. I don’t see much new being written, since for the most part core.logic has been abandoned. Being a core.* project with JIRA and the whole clojure process behind it means it’s unlikely that it will get significant contributions

mrchance17:07:02

@swizzard I am currently learning it too, maybe we can discover stuff together ;) defne, as I understood it, is just a short form for defn + matche

swizzard17:07:34

@norman why has it been abandoned? is there a better alternative?

norman17:07:55

You could consider it basically done

norman17:07:07

Although there’s lots more that could be done if anyone cared

norman17:07:48

I think the bigger problem is that it’s a technology without much of a clear use.

norman17:07:25

At one point I considered possibly writing a core.logic book

norman17:07:45

So then I went out trying to find other people using core.logic in real applications

norman17:07:01

And I really couldn’t find anyone besides us using

norman17:07:27

Maybe more people would use it if they understood it

swizzard17:07:00

ha, perhaps

norman17:07:43

As you’ve discovered, the reasoned schemer approach to learning core.logic isn’t great

hiredman17:07:57

at one point rackspace's managed security was using or planning on using core.logic, but I haven't seen them asking about it in a while so they may have changed it up

hiredman17:07:46

I can't imagine any of the clojure teams I've worked with letting something written in core.logic through code review. The first comment would be "this would be clearer if you used map / filter / etc"

norman17:07:07

We use core.logic because it’s the cleanest/clearest way to write complex queries.

norman17:07:22

The abstraction you can get is really great

norman17:07:45

We have non-clojurists writing core.logic queries and they don’t even know it

norman17:07:46

But we’ve worked really hard to give them good abstractions

hiredman17:07:52

the initial introduction of core.logic is a tough hill to climb

hiredman17:07:24

because at the beginning what you are doing isn't so complicated, so it seems like you could just do it with map and filter and whatever, and it would be easier for people to follow

norman17:07:48

I mean, 95% of what we are using it for could honestly be done with datalog

norman17:07:54

except the queries would be brutal

hiredman17:07:23

the seq library is some kind of local maxima, and it takes a bunch of energy to get to something else

hiredman17:07:26

I don't think a lot of teams can do it (as I've said none of the teams I've been on seemed to want to spend energy in that way)

hiredman17:07:43

which is a shame (for core.logic and other things)

norman17:07:31

I’d like to think there are good use cases for core.logic besides ours…

hiredman17:07:22

sorry, I think I am not being clear, I 100% think core.logic is a better for a lot of cases

hiredman17:07:11

but it doesn't get used because programmers aren't willing to expend extra energy to escape the local maxima(the seq library) to get to something better

norman17:07:38

I don’t know clojure developers like that.

norman17:07:29

But if I can’t tell them practical things they can do with core.logic, I can’t criticize them much for not using it

mrchance17:07:37

I want to use it to write a type checker, maybe you can help? I saw the basic type checker example, and I am wondering how I can get type errors from my program instead of ()

hiredman17:07:06

the type terms unify or add this error to a list of error messages

hiredman18:07:07

(I guess you'd want conda instead maybe)

mrchance18:07:54

Ok, that goes in the direction what I thought too, gonna try that

mrchance18:07:05

I read that conda is a non relational goal, what does that imply?

hiredman18:07:05

I haven't used conda much, but if I recall it is committed choice

hiredman18:07:16

with conde all the arms are tried in "parallel", but conda only the first arm with the first goal that succeeds will be tried

hiredman18:07:58

which would make sense here, I think, if the type terms unify you don't care about building up a list of errors

mrchance18:07:28

Right, also confirms my expectations, was just worried it might have a performance impact or something

urbank19:07:49

Is there still a plan to completely port it to clojurescript?