ChanServ changed the topic of #picolisp to: PicoLisp language | Channel Log: https://irclog.whitequark.org/picolisp/ | Picolisp latest found at http://www.software-lab.de/down.html | check also http://www.picolisp.com for more information
<freeemint> anyhow. where are we?
<beneroth> dunno
<freeemint> want to call it a reformations day?
<freeemint> the 500th to be exact?
<beneroth> I think we are not celebrating it in switzerland
<freeemint> i know but we can still call it that
<beneroth> we had our own reformators
<beneroth> ok
<freeemint> zwingli
<freeemint> f.e
<beneroth> yeah, and calvin in the french region
<freeemint> oh yes calvin
<beneroth> 500th after we liked to burn churches and monasteries, what a thing to celebrate!
<freeemint> 500th after some lone german decided to fight catholic church about what he thought was true
<beneroth> though he still wanted to uphold the godly order of king top most people bottom
<beneroth> and he was successfully because of the printing press. and the even more important (but overlooked) technology of paper making (which previously was of no interest in europe)
<freeemint> 500th that somebody rediscovered and grased the meaning of jesus saying I am the only way to god. The idea of the hola individual.
<beneroth> rediscovered or re-interpreted?
<freeemint> T
<freeemint> that is all i can say about that
<freeemint> it is either of them
<beneroth> good enough :)
<freeemint> wheew
<beneroth> well I find.. the problem with a greater meaning is, that it is self-contradicting.
<freeemint> maybe, but a greater meaning seems to be usefull for survival
<beneroth> if there is a greater determinism at work, than we cannot glimpse at it by any means, it works as it works. if there isn't, we can again not glimpse at it by any means.
<freeemint> atleast more than nihilism
<freeemint> you are migling greater purpose and determinism here. these are two very seperated issues
<beneroth> greater purpose without determinism as quite some problems I find.
<beneroth> that just ends with the introduction of meta-universes, this one being only a test/timeout/whatever/function of the upper one.
<freeemint> not at alli think
<freeemint> T
<beneroth> all the problems we still have on the upper level. its the ad-infinitum problem.
<freeemint> from a logical standpoint yes
<beneroth> well gödel
<freeemint> but asking about upper levels starts to be come a danger to your survival.
<beneroth> sure, you can take any standpoint. but then you also don't have to end at nihilism if you throw greater purpose out of the window.
<freeemint> yes there is nationalism bermensch or communism
<freeemint> *übermensch
<beneroth> I like the notion that originaly once there was no difference between moral bad and practical bad, e.g daemons literally meaning illnesses etc
<beneroth> has also some problems on the edges, though
<freeemint> which reintroduce some purpose
<freeemint> I like the notion that originaly once there was no difference between moral bad and practical bad, e.g daemons literally meaning illnesses etc
<freeemint> that is genius
<beneroth> übermensch has not much to do with nationalism, afaik, though it was tried to establish so
<freeemint> i never thought about it that way
<freeemint> but it makes so much sense
<beneroth> yeah
<beneroth> some complex bloaty constructs resolve to simple things in that model
<freeemint> *nationalism, communism or übermensch as solution to the death of god
<beneroth> practical morals
<beneroth> now you sound like nietzsche
<freeemint> Well that is what happend right?
<freeemint> (except the übermensch part)
<beneroth> well, that was what we was about
<freeemint> that is a good summary of 1900-1950
<beneroth> that started earlier
<freeemint> wanted round numbers
<freeemint> ended later
<freeemint> 1890-1990?
<beneroth> earlier I think
<freeemint> yeah
<freeemint> some complex bloaty constructs resolve to simple things in that model.
<beneroth> and today, so you say? we replaced it first with commerce, consumption, and now with playing social highscore contests via social media?
<freeemint> simulacra
<beneroth> can all be reduced to in-group/out-group
<freeemint> the attempt to simulate something for which there is no original
<beneroth> simulacra? just because it used the internet as medium, it is not virtual
<freeemint> i strongly disagree
<beneroth> ok, I understand now what you meant
<freeemint> no in general . simulacra of growth, politics, ....
<beneroth> but yeah.. as discordians say.. don't swim against the flow.. get out of the river..
<freeemint> simulacra of wisdom,
<freeemint> if you only the river it is hard
<freeemint> There is more to life than in-group/out-group power struggle
<beneroth> to social life?
<freeemint> *if you only know the river, it is hard
<freeemint> yes
<beneroth> well knowing is not doing
<beneroth> Columbus's egg
<freeemint> atleast i hope otherwise, if everything is power and suppressor and suppressed that justifies taking power to supress percieved supressors
<freeemint> which is 1/n steps away from totilitarianism for a large n
<beneroth> well I would say there are two kinds of in-groups.. some that define themselves by being different to the out-group, some that define themselves by having something in common
<beneroth> well most groups are surely an overlapping mix, question is which kind is influencing the group behaviour the most
<freeemint> why is that model usefull?
<beneroth> I believe the behaviour of a group can be determined by looking if it is either a in-focused or an out-focused group
<freeemint> is #picolisp in looking or outlooking?
<beneroth> mostly in-looking
<freeemint> What is the behavior of #picolisp?
<beneroth> talking bad about other programming styles is outlooking behaviour
<beneroth> in-focused groups don't care about the out-group, they ignore it. outlook-groups are practically defined by the outgroup
<freeemint> "This video might anger you " by CPG grey describes out-looking groups?
<beneroth> dunno it
<freeemint> Should watch it
<freeemint> when times comes
<beneroth> I can only find "This video WILL make you angry" and "this video SHOULD make you angry"
<freeemint> it is the first i think
<freeemint> It has to be from CPG Grey
<beneroth> he uses germ instead of the correct term meme
<freeemint> yes
<freeemint> as metaphor
<beneroth> you know friendface? from IT crowd series
<freeemint> nope
<beneroth> oh, watch IT crowd one day
<beneroth> in english. there is a german translated version, can't watch it. looks unbelievable and is not funny.
<beneroth> UK series about typical IT guys and some other stuff.
<freeemint> watching cpg grey?
<beneroth> here the parody ad on facebook within IT crowd
beneroth has left #picolisp ["Verlassend"]
beneroth has joined #picolisp
<freeemint> ah , funny
<beneroth> started watching it
<beneroth> sounds like a rephrasing of meme model from dawkins
<beneroth> will complete it later, too tired now
<beneroth> and seemingly nothing new in it for me. but I only watched 1.5 min.
<freeemint> later he talks about groups and memes
<freeemint> his basic idea is that often groups do not talk with eachother but about a most enraging/engaging straw men of the other group
<freeemint> and that different strawmans evolve to make discussion as unproductive as possible because angry post cry for retweeting and modification
<beneroth> haha
<beneroth> sounds like 'loser talk' in the gervais principle
<beneroth> multiple articles
<beneroth> the terms used are not meant literally
<freeemint> sounds good but way to long
<freeemint> do we want to call it a day? again?
<beneroth> same day?
<beneroth> :)
<beneroth> take care freeemint
<freeemint> good night
<beneroth> thanks, to you too
freeemint has quit [Ping timeout: 260 seconds]
mickiebyrd has quit [Quit: Connection closed for inactivity]
mickiebyrd has joined #picolisp
stacksmith has quit [Remote host closed the connection]
stacksmith has joined #picolisp
<clacke[m]> I love it when #picolisp flips out and I wake up to 200 lines of philosophy of religion
<clacke[m]> omg that friendface ad is amazing
orivej has quit [Ping timeout: 264 seconds]
<akkad> haha
zod_ has joined #picolisp
mtsd has joined #picolisp
chuckJ has quit [Ping timeout: 240 seconds]
chuckJ has joined #picolisp
<beneroth> Good morning
<beneroth> clacke[m], yeah no idea how that happened...
abel-normand has joined #picolisp
<tankfeeder> morning all
<tankfeeder> Regenaxer: should i already post announce about new port?
<Regenaxer> Hi all!
<Regenaxer> tankfeeder, yes, I think it is stable
coffeecup12345 has joined #picolisp
chuckJ has quit [Ping timeout: 248 seconds]
chuckJ has joined #picolisp
<tankfeeder> ok
<clacke[m]> As I scrolled back I thought it would have originated from the pilog discussion via epistemology, but it didn't. :-)
<clacke[m]> ah yes, it started with "AI will doom us all", related to the database you're building. So actually, if very tangentially, still connected to pilog.
Regenaxer has left #picolisp [#picolisp]
Regenaxer has joined #picolisp
f8l has quit [Remote host closed the connection]
f8l has joined #picolisp
orivej has joined #picolisp
<tankfeeder> post announce to reddit, hackers' news and lobsters.
<Regenaxer> Thanks!
<beneroth> Regenaxer, building a pilog rule. if the first rule does (val @X @Arg property), and the second rule also wants to check @X, the second rule can directly use @X not doing (val) again, right?
<Regenaxer> yes, if they are in the same unification level
<beneroth> e.g. (be foo (@Obj) (val @X @Obj x) (not (same @X 5))) (be foo (@Obj) (not (same @X 6)))
<Regenaxer> no
<Regenaxer> @X is unified only in (val @X @Obj x) (not (same @X 5)))
<beneroth> or better do (be foo (@Obj) (val @X @Obj x) (not (or (same @X 5) (same @X 6))))
<beneroth> ok
<Regenaxer> yes, but or needs a *list* of clauses
<beneroth> ah right
<Regenaxer> (or ((foo) (bar)) ...
<beneroth> yeah I already found out
<beneroth> why?
<beneroth> ah ok
<Regenaxer> ok :)
<beneroth> or is one clause and only takes one argument (a list)
<beneroth> ok
<beneroth> no FEXPRs in pilog?
<Regenaxer> or takes multiple args
<Regenaxer> but each arg is a list
<Regenaxer> like chained 'be's
<beneroth> ok
<beneroth> T
<beneroth> yes so did I do it
<beneroth> (or
<beneroth> ((member-current-year @Contact))
<beneroth> ((member-last-year @Contact))
<beneroth> ((member-last-2-years @Contact))
<beneroth> ((member-last-6-years @Contact))
<beneroth>
<beneroth> etc
<Regenaxer> yes, good
<Regenaxer> Perhaps we cannot talk of FEXPRs here
<beneroth> hehe, yeah
<beneroth> (or
<beneroth> ((member-current-year @Contact)
<beneroth> (member-last-year @Contact)
<beneroth> (member-last-6-years @Contact) )
<beneroth> (member-last-2-years @Contact)
<Regenaxer> there is no evaluation in that sense
<beneroth> ((abo-current-year @Contact)
<beneroth> (abo-last-year @Contact)
<beneroth> (abo-last-2-years @Contact)
<beneroth> (abo-last-6-years @Contact) )
<beneroth> so I do it that way. multiple lists, nice grouping.
<Regenaxer> yes
<beneroth> thx
<Regenaxer> :)
<beneroth> ha! I will grok this pilog too
<beneroth> and for this weird huge query work I'm doing right now it is just perfect.
<beneroth> would be horrible to do that in SQL.
<Regenaxer> Yeah, you advance quickly
<beneroth> pure picolisp would be not that horrible, but still require much more code
<beneroth> thank you
<Regenaxer> yeah
<beneroth> hanks to your help and the help of others here
<beneroth> I already have horrible many reference values to pass to the queries
<Regenaxer> you dig in deeply
<beneroth> best way to get to the ground quickly ;)
<Regenaxer> T
<Regenaxer> I should also study Prolog again
<Regenaxer> got rusty
<beneroth> ha yeah, me asking weird holes in your belly (probably that saying doesn't work in english, haha)
<Regenaxer> maybe, but understandable I believe
<Regenaxer> The link posted by cess11 yesterday seems very good
<beneroth> I find learning new things is in itself a skill, it can be trained and than one gets faster at it. but it still always includes some part of forcing oneself to get into it
<beneroth> yes
<Regenaxer> I bookmarked it
<beneroth> no time to study it yet
<beneroth> same
<Regenaxer> me too
<Regenaxer> just the intro so far
freemint has joined #picolisp
<freemint> Hi
<beneroth> hey freemint :)
<Regenaxer> Hi freemint
<freemint> Oh hi beneroth , Regenaxer
<beneroth> Regenaxer, for the select generator clauses.. I would want to check all properties involved in rules, and each one which happens to be an index I write an generator for, right?
<beneroth> so far I only use one
<Regenaxer> yes, could be generated
<beneroth> you mean in theory (as I like to do such stuff), or you mean you have already something for that? :D
<Regenaxer> the 'select' function does that on a very primitive level
<beneroth> I see
<Regenaxer> It applies just a few heuristics
<Regenaxer> not for all indexes
<beneroth> of course, it quickly gets very involved when we talk about indirectly connected objects and properties
<Regenaxer> yes
<freemint> Do you know about the half a page interpreter code of LISP 1.5? It would be interesting to see how it differs from the one in Picolisp
<Regenaxer> freemint, haven't seen it
<beneroth> freemint, the picolisp equivalent would be the core of the VM
<Regenaxer> I saw some of such Lisps in Lisp, but usually not practical
<beneroth> Regenaxer, its mathematical reduction.. all of lisp expressed in a few lisp expressions. the thing about most lisp functions can be expressed by a few core ones.
<Regenaxer> eval, apply plus setq and cond hardcoded
<Regenaxer> For picolisp it is the macro in C:
<Regenaxer> #define EVAL(x) (isNum(x)? x : isSym(x)? val(x) : evList(x))
<Regenaxer> this *is* the interpreter in pil
<Regenaxer> well, hmm
<Regenaxer> needs alse evList()
<freemint> it is very related, the article linked also quote Alan kay
<beneroth> this thing about the reductionability is just a nice property in mathematics. and for lazy programmers who want to build an interpreter, it is the minimum-work.
<Regenaxer> freemint, as I said. Hardcoded behavior, not typical I think
<Regenaxer> like "if equal CAR"
<clacke[m]> The tankfeeder marketing machine is up and running. https://lobste.rs/s/obd5im/picolisp_port_linux_arm64
<Regenaxer> you wont implement a system this way
<beneroth> freemint, Alan Kay invented quite some things.
<beneroth> clacke[m], wow :)
<freemint> I know i watched his two hour the invention of the dynabook talk
<freemint> My project for today it to express the picolisp interpreter as a drawing of cells and make it as cyclic as possible
<Regenaxer> cool
<Regenaxer> interesting!
<freemint> Do you think the picolisp interpreter core could work without symbol look up, just cycles back to the definitions themself?
<Regenaxer> There is no symbol lookup at all in the interpreter
<freemint> ok
<Regenaxer> only the reader does
<beneroth> all read symbols are kinda de-duplicated, so during execution their all bound to the same place in memory
<freemint> ah
<freemint> never thought about it that way
<freemint> What conditional would you take for granted to build picolisp?
<freemint> If or unless?
<Regenaxer> only 'cond' is enough
<Regenaxer> 'unless' is not so good, as it has no "else"
<freemint> You could build any of those from any other
<Regenaxer> Not with 'unless' as you need to evaluate the same expression a second time for an "else"
<Regenaxer> this might have side-effects
<freemint> You could put the evaluated result somewhere
<Regenaxer> Loops can be done by making bodies circular
<Regenaxer> true
<freemint> i did that in a sum programm
<Regenaxer> still you have to evaluate this symbol a second time, which looks kind of stupid
<freemint> but when i looked that the drawing i realized my drawing would not terminate
<Regenaxer> how?
<freemint> the drawing of my sum program
<beneroth> too much cycling?
<Regenaxer> yes, but how can a drawing terminate?
<beneroth> you need a Cut operator as in prolog xD
<Regenaxer> smaller nested structures?
<Regenaxer> yeah!
<freemint> a draw cells of a program
<Regenaxer> btw, I think 'loop' is the sole necessary primitive
<Regenaxer> can emulate 'cond' too
<freemint> but i likee to use cycles over loop
<freemint> T
<Regenaxer> cyclic lists? Yes, cool
<freemint> But i then have to describe loop in another drawing what it does.
<freemint> I already find cond complicated
<freemint> in my drawing i would make it recursice
<Regenaxer> 'cond' is surprisingly simple to implement
<Regenaxer> almost simpler than 'if' ;)
<freemint> I am not sure how i denote state changes f.e. when i work through list i used pop so far.
<Regenaxer> Basically is 'cond' only that:
<Regenaxer> while (isCell(x = cdr(x)))
<Regenaxer> if (!isNil(EVAL(caar(x))))
<Regenaxer> return prog(cdar(x));
<Regenaxer> return Nil;
<Regenaxer> (I removed the '@' handling)
<freemint> do you happen to have a better idea to represent state change?
<freemint> (in a drawing)
<Regenaxer> flow charts?
<freemint> in a drawing of cyclic cells
<Regenaxer> I never understood Nassir-Sneiderman
<Regenaxer> hmm
<beneroth> Nassir-Sneiderman: I had in school. my gf has it in electronics education. never saw it used in real life.
abel-normand has quit [Ping timeout: 240 seconds]
<beneroth> didn't know the name Nassir-Sneiderman.. only knew it as "Struktogramm". same in french.
<Regenaxer> me neither
<Regenaxer> I'm not sure if I spelled it right
<beneroth> freemint, UML activity diagram?
<beneroth> I used that before to picture processes/workflows
<beneroth> ah no
<beneroth> freemint, UML sequence diagram might serve your needs?
<freemint> no, what itthe preferd way of getting pictures to you?
<beneroth> flow charts or activity diagram (can't see much of a difference) for processes/flows, ERD/class diagramm for overview of structure
<beneroth> I like ERD
<beneroth> but primarily I prefer code. diagrams are often like outdated comments in code
<freemint> I do not find them usefull for that purpose, because the state change is store something into a cell
<Regenaxer> beneroth, same here
<Regenaxer> freemint, use pil asm
<Regenaxer> pil vm
<Regenaxer> like Knuth uses Mix
<freemint> That is an okish solution
abel-normand has joined #picolisp
<Regenaxer> okish, cool, didn't know
<freemint> If possible i would like to have graphical represenatation of what the picolisp VM is doing to
<C-Keen> I have read 'orkish' and that didn't sound nice
<Regenaxer> :)
<clacke[m]> So now you're modeling programming languages in logic programming? It's Erlang all over again. :-)
<clacke[m]> And minikanren Scheme.
<beneroth> it is the adjective for ok, no?
<beneroth> urban dict says: A state of being moderately down, but some way short of full-blown miserable.
<beneroth> so.. more like orkish
<freemint> okayish
<Regenaxer> kind of "almost OK"?
<freemint> yes
<freemint> I do not like that idea
<freemint> Why is it (eval (stuff)) and not (eval stuff)?
<Regenaxer> Both is legal
<freemint> (eval quote car A) -> number . (eval (quote car A)) -> car from A
<Regenaxer> This cannot be interpreted
<Regenaxer> (quote car A)
<Regenaxer> a function with 2 args?
<Regenaxer> or one arg, and car is the next call?
<freemint> (eval (quote car A)) works
<Regenaxer> yes, if you take current Lisp syntax
<freemint> same as (eval (quote . (car A)))
<Regenaxer> yes, but what do you want to do?
<Regenaxer> omit parens?
<freemint> i am asking myself rn (unrelated)
<freemint> why we do (eval (quote . (car A))) instead of (eval . (quote . (car A))) in picolisp.
<freemint> like we did cell saving at quote
<freemint> why not at eval?
<Regenaxer> this would be possible
<beneroth> bbl
<Regenaxer> if eval had only one arg
<freemint> it does not?
<Regenaxer> no
<Regenaxer> The main reason is convention
<Regenaxer> Evaluating functions ignore an atomic CDR of the body
<Regenaxer> Only FEXPRs take the rest in the CDR
<Regenaxer> and 'quote' is a FEXPR
<Regenaxer> (de f (A B C . D) ...)
<Regenaxer> D is not evaluated
<freemint> i know
<Regenaxer> but 'eval' is a FSUBR
<freemint> fsubr?
<Regenaxer> FEXPR, FSUBR, EXPR
<Regenaxer> no LEXPR in pil
<Regenaxer> old terms
<freemint> I do not understand subr
<freemint> It sounds like not bein drunk
<Regenaxer> it is a machine-level EXPR
<Regenaxer> look it lp
<Regenaxer> up
<Regenaxer> EXPR is (de f (A B))
<Regenaxer> FEXPR is (de f X)
<Regenaxer> FSUBR and SUBR are primitives, written in asm, C etc
<Regenaxer> F always mean non-evaluating
<freemint> ah a specialform
<Regenaxer> I don't know where the terms come from
<Regenaxer> Pil also has no SUBR really
<freemint> lisp 1.5
<Regenaxer> all are FSUB$
<Regenaxer> FSUBRs
<freemint> :D
<freemint> for is not a subr?
<Regenaxer> so if eval hat the arg in the CDR
<Regenaxer> you could not do things like apply or map
<Regenaxer> All built-in are FSUBR
<Regenaxer> non-evaluating initially
<freemint> you are saying (eval . (quote . (car A))) breaks apply and map?
<Regenaxer> it is the body which evaluates or not
<Regenaxer> the callee, not the caller
<freemint> ah
<freemint> i do not see how it breaks them
<Regenaxer> you need a consistent syntax
<Regenaxer> if the arg is sometimes in the CAR and sometimes in the CDR, you can't do useful things
<freemint> the syntax could be 'A if is not evaluted by default
<Regenaxer> Also calls like ((foo) (arg)) would break
<Regenaxer> we don't know what (foo) returns, could be 'eval'
<freemint> yeah the fix wo
<Regenaxer> Think about it, it is not a good idea
<freemint> *would be something like ((foo) prog1 (arg))
<Regenaxer> resulting in (eval prog1 (arg))
<freemint> yes
<Regenaxer> so we are back at the standary syntax
<freemint> (eval . (prog1 (arg))
<freemint> )
<Regenaxer> sigh
<Regenaxer> I give up
<Regenaxer> try it yourself
<Regenaxer> you get a big chaos
<Regenaxer> not orthogonal
<Regenaxer> just to save one cell?
<freemint> oh these reason make sense
<Regenaxer> You need a flag in each function how it expects its args
<Regenaxer> and the programmer has to remember that
<freemint> or worse two different types of functions
<Regenaxer> The interpreter must first look what kind it gets
<Regenaxer> yes
<freemint> so it won't be faster
<Regenaxer> no, a *lot* slower
<Regenaxer> interpreting flags is costly
<Regenaxer> compared to just jump to an address in a pointer
<freemint> Do you have energy to spare for one more stupid question?
<Regenaxer> hehe
<Regenaxer> I'm sure they are not stupid
<freemint> thanks
<freemint> A lisp without automatic evaluation of parameters.
<freemint> Everything is a fexpr
<Regenaxer> all FEXPR?
<Regenaxer> yes
<freemint> What is the problem with that?
<Regenaxer> possible, but perhaps tedious to use
<Regenaxer> And at least some functions must be SUBR
<Regenaxer> like 'eval'
<freemint> T
<Regenaxer> perhaps only 'eval'
<Regenaxer> like in Unix shells
<freemint> you need some if to
<Regenaxer> all is fexpr
<Regenaxer> except $ which is eval
<Regenaxer> yes, but 'if' is a FEXPR or FSUBR anyway
<freemint> ok
<freemint> One idea i think would be cool about it is the you could create new function types which have paralized eval behavior or do divide and conquer before evaulating
<Regenaxer> yes
<Regenaxer> wanted to do that in PilOS originally
<freemint> Why did you decide against that?
<Regenaxer> have primitives parallelized on the CPUs level
<Regenaxer> not against
<Regenaxer> Did not continue with PilOS
<freemint> ah is dormant or discontinued?
<Regenaxer> Should start new with Arm64
<Regenaxer> it is very CPU dependent
<Regenaxer> sorry, must go
<freemint> ok bye
<Regenaxer> cu :)
<freemint> queue
<freemint> :)
<Regenaxer> :)
abel-normand has quit [Ping timeout: 260 seconds]
<freemint> beneroth: did you watch the video till it's end
coffeecup12345 has quit [Ping timeout: 260 seconds]
alexshendi has joined #picolisp
coffeecup12345 has joined #picolisp
abel-normand has joined #picolisp
rgrau has joined #picolisp
<tankfeeder> i've got a message on reddit:
<tankfeeder> you have been added as an approved submitter to /r/lisp: Lisp.
<tankfeeder> :)
<beneroth> yeah! congratulations tankfeeder !
<beneroth> freemint, not yet. still in stress mode. ask me in the evening or on thursday again.
<freemint> i am reading the gerv... principles right now
<freemint> I still cling to the hope that it does not describe the real world
<beneroth> it doesn't, it is about a TV show
<beneroth> but... I worked in big corporations.. and there.. it is mostly like this...
<beneroth> I don't think the gervais principle is an universally applicable model. but I actually found it a useful model for some social structures
<beneroth> sorry :)
<beneroth> Regenaxer, select/3 and multiple generator clauses.. I guess select/3 makes sure to not return the same value multiple times, right? and B): I have to make sure that the all generators would produce the same values, they don't form a UNION set but must all contain at minimum the target values (in different orderings)
<beneroth> first I took generators as forming an (or), not an (and)
<beneroth> Regenaxer, found it: "select then collects all objects which passed through the filters into a unique list, to avoid duplicates which would otherwise appear, because most objects can be found by more than one generator clause. "
<beneroth> Regenaxer, so does select/3 just start to output (= calling the prog in pilog) after it already collected all results, or does it only build a list of output values to be used as blacklist (not (member ListPreviousVaues)) ?
<beneroth> just asking for theorising reasons... performance behaviour and RAM usage would be different
<freemint> beneroth: what do your test say about that?
<beneroth> which test?
<beneroth> memory usage you mean?
<beneroth> not testing for that
<freemint> oh sorry read it wrong
<Regenaxer> ret
<Regenaxer> beneroth, it returns the results one by one, possibly very many
<Regenaxer> your other assumptions are correct too
<Regenaxer> it keeps values found so far in an 'idx' iirc
<beneroth> very good
<beneroth> yeah that is the most efficient way to do this
<beneroth> you could write me how to debug pilog, or send me a link
<beneroth> I currently have a case of a rule which does fail when I think it should not. and I can't find the issue
<beneroth> (val) and (get) I tested, even with val giving the value out
<beneroth> but the (same) fails
<Regenaxer> you can pass symbols (non-vars) to 'prove'
<beneroth> ah I see
<beneroth> good
<beneroth> I'll check it out
<beneroth> have to make a telephone call first, unrelated
<Regenaxer> ok
<beneroth> currently I'm very confused and annoyed why the rule suddenly stops working, when the (same) should be (and is seemingly) the exact same external symbol
<Regenaxer> yes, just checked. In addition to ... @Var (val) ... you can also pass ... foo ..
<beneroth> will check it out
<beneroth> thanks
<Regenaxer> then 'foo' is traced
<Regenaxer> (as a Pilog predicate)
<beneroth> (prove (goal '(@Contact Contact @Language Language @CountryRate CountryRate @ContactLanguage Language (area @Contact @ContactLanguage))) area)
<beneroth> -> NIL
<beneroth> like this?
<Regenaxer> no, (area) in the end
<beneroth> ah no, must be a list
<beneroth> yeah saw it now
<Regenaxer> Usually you don't call prove, but pass it to goal
<Regenaxer> (goal area foo bar @Contact ...
<Regenaxer> (goal '(area foo bar @Contact ...
<beneroth> I don't understand. "usually you don't call prove" ?
<beneroth> can you help me a bit? I don't find the mistake
<Regenaxer> prove is implicit usually
<beneroth> still don't understand.. you mean in (?) and (select) or how?
<Regenaxer> and 'goal' often too
<Regenaxer> yes
<beneroth> ok
<beneroth> yeah understood that
<beneroth> it is quite confusing at the beginning, because for so many functions it is different
<Regenaxer> so you pass the trace symbols just where you pass the variables
<beneroth> he..you mean within goal ?
<Regenaxer> yes
<Regenaxer> as my last line above
<Regenaxer> (goal '(area foo bar @Contact ...
<Regenaxer> or for debug (? foo bar area ...
<beneroth> ah, and it detects that it isn't an assignment as the first doesn't start wiht @, and also it is no list so no predicate, right
<Regenaxer> yes
<Regenaxer> 3 cases
<Regenaxer> sym, @var, (expr)
<beneroth> seems not to work though
<beneroth> : (prove (goal '(area val same @Contact Contact @Language Language @ContactLanguage Language (area @Contact @ContactLanguage))))
<beneroth> -> NIL
<beneroth> : (prove (goal '(@Contact Contact @Language Language @ContactLanguage Language (area @Contact @ContactLanguage))) '(area val same))
<beneroth> 1 (area {2122} {2161})
<beneroth> 1 (same {2161} @Language)
<beneroth> -> NIL
<beneroth> : (rules 'area)
<beneroth> 1 (be area (@Contact @ContactLanguage) (same @ContactLanguage @Language))
<Regenaxer> I would do
<Regenaxer> (prove (goal '(area val same @Contact ...
<beneroth> yeah see my first line
<Regenaxer> or (? for testing
<Regenaxer> you put it in the end
<beneroth> not in the first call
<Regenaxer> of prove which is fine
<Regenaxer> ah, right, sorry!
<beneroth> and that didn't trace
<Regenaxer> it traced
<beneroth> but it did trace when I added them to prove
<Regenaxer> 1 (area {2122} {2161})
<beneroth> yeah, when I added them to prove
<Regenaxer> : (? append (append (a b c) (d e f) @X))
<Regenaxer> 2 (append (a b c) (d e f) (a . @Z))
<Regenaxer> 2 (append (b c) (d e f) (b . @Z))
<Regenaxer> 2 (append (c) (d e f) (c . @Z)) 1 (append NIL (d e f) (d e f)) @X=(a b c d e f)
<Regenaxer> the number is which rule fired
<beneroth> : (? area same val @Contact Contact @Language Language @ContactLanguage Language (area @Contact @ContactLanguage))
<beneroth> -> NIL
<beneroth> 1 (area {2122} {2161})
<beneroth> 1 (same {2161} @Language)
<Regenaxer> (rules 'append) 1 (be append (NIL @X @X)) 2 (be append ((@A . @X) @Y (@A . @Z)) (append @X @Y @Z))
<beneroth> yeah that works, but not when I put the trace into goal
<beneroth> anyway, what matters is: we have a trace
<beneroth> so now, why does it (same {2161} @Language) and not (same {2161} {2161}) ???????
<beneroth> I guess that is the cause of my issues
<Regenaxer> hmm
<beneroth> (rules 'area)
<beneroth> 1 (be area (@Contact @ContactLanguage) (same @ContactLanguage @Language))
<beneroth> -> area
<Regenaxer> hmm, I never put it into 'prove'
<Regenaxer> it ends up in prove of course
<Regenaxer> : : (? append (append (a b c) (d e f) @X))
<Regenaxer> prove : (((1 (0) NIL ((append (a b c) (d e f) @X)) NIL T))) (append)
<Regenaxer> ...
<Regenaxer> I did (trace 'prove)
<tankfeeder> (setq L (range 1 5))
<tankfeeder> how to print:
<tankfeeder> 1
<tankfeeder> 12
<tankfeeder> 123
<tankfeeder> 1234
<tankfeeder> 12345
<tankfeeder> any hints ?
<viaken> Does a recent version remove the 64-bit emulation option?
<viaken> make: *** No rule to make target 'sys/emu.linux.code.l', needed by 'emu.linux.base.c'. Stop.
<Regenaxer> viaken: should not have changed
<tankfeeder> make clean && make
<Regenaxer> tankfeeder: 'head' ?
<tankfeeder> ok
<beneroth> Regenaxer, telephone finished.
<Regenaxer> ok
<beneroth> so why does it result in (same {2161} @Language) and not (same {2161} {2161}) ??
<Regenaxer> (for I 5 (prinl (head I (1 2 3 4 5))))
<Regenaxer> s/5/(length L)
<viaken> Same issue. Weird.
<Regenaxer> beneroth, the tracing prints the clauses which succeed to match
<Regenaxer> it is something returned
<Regenaxer> not
<beneroth> Regenaxer, so the failing ones don't get printed?
<beneroth> well the (?) and (prove) returns NIL
<Regenaxer> yes, not printed
<beneroth> (? area same val @Contact Contact @Language Language @ContactLanguage Language (area @Contact @ContactLanguage))
<beneroth> 1 (same {2161} @Language)
<beneroth> -> NIL
<beneroth> 1 (area {2122} {2161})
<beneroth> why return NIL then, if (area) was successful ?
<beneroth> (rules 'area)
<beneroth> 1 (be area (@Contact @ContactLanguage) (same @ContactLanguage @Language))
<beneroth> -> area
<beneroth> sorry viaken for interrupting you
<Regenaxer> viaken, right!
<Regenaxer> it fails here too
<Regenaxer> Must be because the Makefile changed
<Regenaxer> it must be emu.code.l
<Regenaxer> where does the "linux" come from?
<viaken> beneroth: No worries. Are interruptions frowned upon here? Most IRC channels I've been in tend to elide them.
<beneroth> no idea, I just try to behave
<beneroth> I would much appreciate for fast help with my issue
<beneroth> I don't understand why it does not work. I had similar code working before.
<beneroth> and I need to finish this asap.
<Regenaxer> yeah
<Regenaxer> beneroth, can you pastebin some relevant code fragment?
<beneroth> I guess it fails because someohow @Language is in the same instead of its value.. bow how?
<beneroth> ok
<beneroth> I think everything relevant is already pasted here, but yeah, will do
<Regenaxer> or is it just 'area'?
<Regenaxer> ok, let me check here first
<Regenaxer> area has only this single rule?
<Regenaxer> boiling down to 'same'?
<Regenaxer> viaken, can you investigate src64/Makefile meanwhile?
<Regenaxer> must be some stupid change
<viaken> Regenaxer: Yeah, I'm digging through the diff. The big if/else block changed, but it's a little hard to follow.
<Regenaxer> I basically only added the Android target
<Regenaxer> indeed
<beneroth> Regenaxer, T
<Regenaxer> quite a mess the Makefile
<beneroth> of course, the final version is different, but the problem boils down to this
<Regenaxer> can you try 'equal' instead of 'same'
<Regenaxer> 'same' is more special
<Regenaxer> one of the DB predicates, following links
<Regenaxer> and not bi-directional perhaps
<Regenaxer> : (? (same 123 @A)) -> NIL
<Regenaxer> see?
<beneroth> aaah
<Regenaxer> : (? (equal 123 @A)) @A=123 -> NIL
<Regenaxer> equal unifies
<Regenaxer> 'same' is a filter predicate
<beneroth> T, I overlooked the same vs equal thing
<Regenaxer> not sure how it behaves internally
<beneroth> only used equal
<Regenaxer> yeah, confusing
<beneroth> funningly, the same code in other rules worked with same
<beneroth> haven't used equal yet
<Regenaxer> Perhaps via another path?
<Regenaxer> 'equal' is not often needed
<beneroth> yeah it works now!
<Regenaxer> great! :)
<beneroth> (the test example)
<beneroth> so I guess I should replace all same with equal, unless some get'ting is necessary?
<beneroth> so far I always did (val @X ...) (same @X ...)
<Regenaxer> do you really need 'equal' or 'same' so often?
<Regenaxer> Equality is implicit anyway in the Prolog unification
<Regenaxer> ie if you use the same variable, it fires or not depending on being equal
<beneroth> so I should either do (val @X ..) (equal X@ ..) or maybe (same @ReferenceValue @Obj property 1 property) instead, so removing the need for (val) ?
<Regenaxer> so an explicit equal is rare
<Regenaxer> (val @ReferenceValue ...
<beneroth> well I have a bunch of reference values which first gets fetched with (db) or given from lisp level
<Regenaxer> directly
<beneroth> ah
<beneroth> I see!
<beneroth> nice
<beneroth> yes of course!
* beneroth feels stupid
<Regenaxer> nono
<beneroth> ok, I modify and try the real code again :)
<Regenaxer> ok
<beneroth> this same issue drove me crazy
<Regenaxer> :)
<beneroth> too much pressure in this matter, but that is another problem ;)
<Regenaxer> Pilog is similar yet very different from Lisp
<Regenaxer> yeah!
<beneroth> thank you for your quick help!
<Regenaxer> Such things should not be done under pressure
<beneroth> yeah, there should be time to learn new things instead of learning by doing. though learning by doing is pretty efficient :)
<Regenaxer> T
<Regenaxer> I have the same problems. Not in Prolog think
<Regenaxer> a very different approach
<beneroth> but usually you have more relaxed work days I guess ;)
<Regenaxer> indeed
<beneroth> some of it is my fault, some is circumstances.
<beneroth> Regenaxer, yeah got it working. I'm back on the right track! Thanks!
<beneroth> my rescuer :)
<beneroth> so I can be the rescuer of my client
<Regenaxer> Cool! :)
<beneroth> shortening the code now, using (val) correctly makes it a lot shorter
<beneroth> the rules I mean
<beneroth> Regenaxer, when comparing a (val) with a hardcoded value, than it can also be done without same? so (val 2017 @Contact member-till) is fine?
<Regenaxer> yes
<beneroth> perfect
<Regenaxer> should be
<beneroth> yeah makes sense
<Regenaxer> I'm just reluctant with these DB predicates
<Regenaxer> they are sometimes not pure Prolog
<beneroth> in which sense?
<Regenaxer> but more kind of "returning"
<Regenaxer> They call Lisp internally
<beneroth> well T... the way I made it first with extra value and (same) was surely not prolog-spirit. but the (val) is prolog-spirit I think, just an unusual access to the value
<beneroth> so the variable reading in RAM is kinda hooked, but else it is the same, no?
<beneroth> the hook (the get) must always return the same, so it is fine.
<beneroth> if it returns different values then it breaks prologs assumptions I guess
<Regenaxer> (be val (@V . @L)
<Regenaxer> (^ @V (apply get (-> @L))) T )
<Regenaxer> so yes, it should be fine
<beneroth> ah I see
<beneroth> nice
<beneroth> yeah
<beneroth> so now I remove all those (val @X) instances, expect for when I need to do a (less_than @X)
<beneroth> much purer
<Regenaxer> yep
<Regenaxer> viaken: I think I found it! My fault!!!
<viaken> Regenaxer: Which line number? I'd like to understand the problem.
<Regenaxer> I moved "SYS = .linux" out of the 'if'
<Regenaxer> fatal!
<viaken> So, 66
<Regenaxer> SYS must stay unset
<Regenaxer> yes, exactly
<Regenaxer> it was set only inside the if bodies
<viaken> That's got it! Thanks. :)
<Regenaxer> So line 66 must be cut out, and inserted into the 3 if's
<Regenaxer> right?
<viaken> That's what I did locally.
<Regenaxer> good
<Regenaxer> I do that here too, and make a release after starting my notebook
<viaken> This is on my Raspberry Pi, so $(MACHINE) is armv6l, so SYS was being set despite not matching any of the conditions.
<Regenaxer> yes, this is the problem :)
<tankfeeder> last time 38 ppl on channel was a year ago.
<Regenaxer> viaken, very good that you found this. My fault that I didn't test building 'emu' this time
<Regenaxer> tankfeeder, a lot today indeed :)
<viaken> Always happy to help where I Can.
<Regenaxer> :)
<Regenaxer> I've now released a new picoLisp.tgz. If you have a chance, can you 'diff' your version with the new src64/Makefile? Just to be sure ...
<viaken> Sure
<Regenaxer> thx
<viaken> Regenaxer: No differences
<Regenaxer> Perfect!
coffeecup12345 has quit [Ping timeout: 252 seconds]
<beneroth> Regenaxer, multiple (be something) form an AND, or not?
<beneroth> I mean (something @Bla) is only successful if all rules of something succeed, not?
<beneroth> Regenaxer, I need help again
<beneroth> very weird
<Regenaxer> no, they form an OR
<beneroth> aah
<beneroth> ok, that explains it
<beneroth> thanks!
<Regenaxer> inside a predicate the clauses are AND
<beneroth> yep, just tested that variant, got it
<beneroth> many little mistakes to make...
<Regenaxer> g
<Regenaxer> T :)
<beneroth> use the middlefinger ;)
<beneroth> ah no
<beneroth> thumb was missing, not middle finger, right?
<Regenaxer> in which context?
<Regenaxer> ah, the "g"?
<beneroth> T
<Regenaxer> I don't know what I wanted to write
<Regenaxer> but I thit ^Z
zod_ has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
<Regenaxer> and had to do "jobs fg" to get the client in front again
zod_ has joined #picolisp
<beneroth> the filter clauses within (select) form an AND, right?
<beneroth> I mean select/3
<beneroth> haha
<beneroth> now I managed to get a signal-11 caused by a pilog rule :)
<beneroth> segfault
<Regenaxer> sorry, was interrupted
<Regenaxer> yes, AND
<beneroth> thx
<beneroth> oh the segfault is caused by an or/2
<beneroth> I forgot to put the arguments into a list again
<Regenaxer> missing paren?
<Regenaxer> yep
<beneroth> must result in a memory corruption, because sometimes it worked xD
<freemint> type systems have their merits
<Regenaxer> Pilog fetches the CAR and CDR, this may or may not work :)
<Regenaxer> freemint: It *is* typed
<Regenaxer> Just not checked on this level
<Regenaxer> As you know, pil does not check every pathological case at runtime
<beneroth> freemint, the dangerous bugs are the ones which don't blow up your application
<beneroth> the others you will detect and find :)
<Regenaxer> very true
<Regenaxer> Such structural errors never give correct results, so simple testing finds them
<beneroth> freemint, I recently worked a lot both with C# and picolisp (not combined, one day C# then a day picolisp)
<beneroth> I prefer the freedom of duck typing in picolisp much over all the manual explicit casting necessary in C#
<beneroth> and the base typing in picolisp (list, symbol, number) is stronger than most other type implementations, actually
<Regenaxer> yeah, static type errors detected by a compiler are illusionary
<Regenaxer> many people stop here
<beneroth> well
<beneroth> it detects errors, but those are errors only beginner coders make.
<Regenaxer> right
<beneroth> horrible type errors can still happen, and often do, as a result of generic programming
<beneroth> but the other effect is lot of bloat code to circumvent the type system
<beneroth> manual casting etc
<Regenaxer> T
<Regenaxer> as pil32 does
<Regenaxer> in C
<beneroth> C and C++ both have pretty weak typing
<beneroth> more code = more to write, more possibilities for mistakes, harder to debug, harder to analyse / get into when you are new to the project
<beneroth> if you want do type checking, then to it right, take it to the extreme like haskell
<beneroth> mainstream languages are all in some fuzzy middleground
<beneroth> which I find just introduces all disadvantages of type checking without much benefits
<Regenaxer> and, as you say, ugly casts
<beneroth> well.. ok the benefit that untrained people can with hazzle (compiler errors) code something might be something...
<Regenaxer> in pil64 we have off (A CDR) 1 this is in pil32 *(word*)&cdr(p) &= ~1;
<beneroth> I don't know haskell really, but I guess it doesn't have much casting in that sense...can ask an haskell dev next week
<beneroth> yeah, really readable xD
<Regenaxer> from the mark function in gc in both cases
<Regenaxer> I wonder if haskell even supports such pointer fiddling
<beneroth> Regenaxer, I'm tired of my many reference parameters to goal. will now write an fexpr to append them
<beneroth> ah, fexpr are nice
<Regenaxer> ok
<beneroth> (prove (goal (addrefs (member-current-year @Contact) ) ... )
<beneroth> much better :D
<beneroth> I currently have 10 reference values
<Regenaxer> to avoid the quote'
<Regenaxer> ?
<beneroth> not really
<beneroth> (prove (goal '(@Contact This @BackgroundPress BackgroundPress @MembershipMember MembershipMember ....
<beneroth> to prevent this mess
<Regenaxer> makes sense
C-Keen is now known as CorpseKeen
libertas has quit [Quit: Lost terminal]
<beneroth> Regenaxer, not/1 can have multiple arguments, forming a (nand) ?
<beneroth> (as I saw that there is no and predicate)
<Regenaxer> because AND is implicit anyway
<tankfeeder> seen, right?
<beneroth> yeah
<beneroth> Regenaxer, so (not
<beneroth> (val @MemberTill @Contact member-till)
<beneroth> (less_than 0 @MemberTill) )
<beneroth> is okay?
<beneroth> thanks tankfeeder
<Regenaxer> I expected that not/1 takes a single expression, not a list of clauses
<beneroth> ok
<beneroth> then another question
<Regenaxer> (be not @P (1 (-> @P)) T (fail))
<Regenaxer> (be not @P)
<beneroth> does a failing (val @NewValue ...) cause failing of the predicate?
<Regenaxer> The AND chain fails and stops
<Regenaxer> (until it is possibly backtracked)
<beneroth> because my case is : (val ) -> if no value, good. if value, is (not (< 0 @value))
<beneroth> how to make this into a predicate?
<Regenaxer> then OR?
<beneroth> or with double (val), okay
<Regenaxer> (or ((not @P)) (^ @ (gt0 (-> @Val))))
<Regenaxer> (or ((not @P)) ((^ @ (gt0 (-> @Val)))))
<Regenaxer> hehe
<beneroth> ah okay
<beneroth> so @P will have an value
<beneroth> (or
<beneroth> ((not (val @MemberTill @Contact member-till))
<beneroth> (less_than 0 @MemberTill) ) )
<beneroth> so this way
<Regenaxer> yes, just one more nesting perhaps
<Regenaxer> ((less_than ... ?
<beneroth> no, the less is within the same list as the (not)
<Regenaxer> ah
<beneroth> so should be correct
<Regenaxer> so it is an AND
<Regenaxer> sounds wrong
<beneroth> is it?
<beneroth> aaaah
<beneroth> okay
<beneroth> yeah than it would be wrong
<Regenaxer> though NIL is indeed less than 0
<beneroth> doesn't the failing (val) fail the predicate in any case? no?
<beneroth> I had the impression from the (val) definition you posted today
<Regenaxer> it fails within the AND
<Regenaxer> but not in the OR
<Regenaxer> (be f () (or ((a) (b) (c)) ((d) (e) (f))))
<Regenaxer> a and b and c
<Regenaxer> if a or b or c fails, then d and e and f
<Regenaxer> as the AND is always implicit in Prolog
<Regenaxer> within a predicate
<Regenaxer> and OR for multiple rules
<Regenaxer> (be father (Alex Mia)) (be father (Alex Laila)) (be father (Alex Mona))
<Regenaxer> so OR
<Regenaxer> (? (father Alex @X))
<Regenaxer> returns 3 times
<Regenaxer> 3 values because it is OR
<beneroth> yeah
<beneroth> every rule is a decision point for the backtracking algo, yeah?
<Regenaxer> Yes
<Regenaxer> if backtracking, the next OR alternative is tried
<beneroth> (or
<beneroth> ((not (val @MemberTill @Contact member-till)))
<beneroth> ((less_than 0 @MemberTill)) )
<beneroth> so this is right then?
<Regenaxer> yes
<beneroth> and @MemberTill does exist in both contexts?
<beneroth> being unified I mean
<Regenaxer> I would say not
<beneroth> ok, then we need this:
<beneroth> (or
<beneroth> ((not (val @MemberTill @Contact member-till)))
<beneroth> ((val @MemberTill @Contact member-till)
<beneroth> (less_than 0 @MemberTill) ) )
<Regenaxer> yes, good I think
<beneroth> in the previous version the less_than would always succeed, as (< 0) -> T
<Regenaxer> or make less_than more clever
<beneroth> T
<beneroth> move the get into the less_than
<beneroth> that do you mean, right?
<Regenaxer> move the not into it I mean
yumaikas is now known as yumaikaspook
yumaikaspook is now known as yumaikas
<beneroth> the not is about canceling the Cut issued by the failing (val)
<beneroth> (setq @MemberTill (get @Contact member-till)) (cond ((= @MemberTill NIL) T) ((< 0 @MemberTill) T) (T NIL))
<beneroth> (not reduced lisp code, I know, written out to explain it)
<Regenaxer> yes, np
<beneroth> I mean, moving the not into the less_than is not helping. both the not and the val would have to be moved into the lisp level
<Regenaxer> yes
<Regenaxer> Is less_than really just a numerical < ?
<beneroth> currently yes xD
<beneroth> (be less_than (@A @B)
<beneroth> (^ @ (< (-> @A) (-> @B))) )
<beneroth> copied from the wiki article
<Regenaxer> (or ((not (val @MemberTill ...))) ((val @MemberTill ...) (^ @ (gt0 (-> @@MemberTill]
<Regenaxer> I would do the Lisp direcly inly
<beneroth> is the bevaiour of (^) somewhere described? couldn't find any reference. though I can see what it does.
<Regenaxer> inline
<Regenaxer> Still it is ugly to need the 'val' twice
<beneroth> T
<beneroth> but I don't mind for the moment. I think the speed impact will not matter much.
<Regenaxer> It should be in ref.html
<Regenaxer> true
<beneroth> I'm aware that it is ugly :)
<beneroth> if it works its ok
<beneroth> the important thing to notice is that a failing (val) makes the surrounding predicate fail
<beneroth> right?
<Regenaxer> des
<Regenaxer> yes
<Regenaxer> When the CAR of a Pilog clause is the symbol ^, then the CDDR is executed as
<Regenaxer> a Lisp prg body and the result unified with the CADR.
<Regenaxer> depends on what is "surrounding"
<Regenaxer> here it won't fail (or ((not (val @MemberTill ...))) ((val @MemberTill ...) (^ @ (gt0 (-> @@MemberTill]
<Regenaxer> as not is checked first
<beneroth> yep
<Regenaxer> I think I would write a Lisp function to avoid the double 'val'
<beneroth> well that text is where? there is a reference for ^ in the "Global" section (linked in the overview), but there it is only about debugging
<beneroth> Regenaxer, T
<Regenaxer> Pilog (PicoLisp Prolog)
<beneroth> I am just to lazy and stressed out to do it now
<Regenaxer> np
<beneroth> ok
<Regenaxer> the chapter near the end of doc/ref.html
<beneroth> maybe I would copy that text to the ^entry in https://software-lab.de/doc/ref_.html#^
<beneroth> found it, thx
<Regenaxer> hmm, ^ in ref is not about Pilog at all
<Regenaxer> also in Pilog, ^ is just a marker
<Regenaxer> not a real predicate of its own
<Regenaxer> the interpreter checks that symbol explicitly
<beneroth> <Regenaxer> hmm, ^ in ref is not about Pilog at all
<beneroth> yep exactly
<Regenaxer> yes
<Regenaxer> it does not exist kind of
<beneroth> I think it should also be about the pilog context :)
<Regenaxer> hmm
<Regenaxer> it is a syntactical escape
<beneroth> as the other pilog built-ins are also documented in the reference. under an extra entry, yes, but that entry is always next to the lisp variant
<Regenaxer> from Pilog to Lisp
<Regenaxer> yes
<Regenaxer> but ^ is not a built-in in that sense
<Regenaxer> as also T is not (cut)
<Regenaxer> They are just syntax markers
<Regenaxer> patterns
<Regenaxer> hmm
<beneroth> yes, but that is no difference for the picolisp/pilog programmer
<beneroth> just a technical sidenote on the VM implementation
<beneroth> no?
<Regenaxer> right, but they have no definition
<Regenaxer> more like other markup like parens
<beneroth> as a programmer, I just remember "(^ Arg prog)" is like the pilog variant of (de)
<Regenaxer> Not of 'de' (= define)
<Regenaxer> it is a Language switch
<Regenaxer> Pilog -> Lisp
<beneroth> technically, yes
<cess11> A little like '?
<Regenaxer> it means "unify with a Lisp expression"
<Regenaxer> ? is a normal FEXPR here
<Regenaxer> So ^ is pure syntax, so the explanation in the pilog chapter is right
<Regenaxer> in ref.html
<Regenaxer> The ref of ^ could point to it, yes
<Regenaxer> not sure, it is a special case
<Regenaxer> Also T then
<Regenaxer> The ref of T does not mention the cut meaning in Pilog
<beneroth> <Regenaxer> The ref of ^ could point to it, yes
<beneroth> agreed, that is the best solution
<beneroth> and yes, I would also link from T to it :)
<Regenaxer> not sure, it opens an pandora box
<beneroth> kinda "T is also used in Pilog" <- this be the link
<beneroth> how so?
<beneroth> we have hypertext, so I say yes lets link everything which is associated
<Regenaxer> Such symbols are used in many contexts
<Regenaxer> T is also the property key for Pilog
<beneroth> yeah, and when I look at the entry I want to get an overview for all its usages, no?
<Regenaxer> yes
<Regenaxer> ok, first finish for your deadline! ;)
<beneroth> T
<beneroth> thanks for your precious help
<Regenaxer> :)
DKordic has quit [Ping timeout: 240 seconds]
<Regenaxer> No holiday today in Suisse? I see in the BTG log files that they worked today
alexshendi has quit [Ping timeout: 240 seconds]
<Regenaxer> Tomorrow we have a holiday here too
<beneroth> Regenaxer, not today. we had our own variants of Luther you know :)
<Regenaxer> T
<beneroth> and tomorrow only the catholic areas, which is the minority
<Regenaxer> ah, right
<tankfeeder> i will try port to this one
<Regenaxer> Yet Another OS?
alexshendi has joined #picolisp
<tankfeeder> old opensolaris closed by oracle
<Regenaxer> ah
<CorpseKeen> kloracle
<Regenaxer> haha :)
alexshendi is now known as alexSpectre
coffeecup12345 has joined #picolisp
yumaikas is now known as yumaikaspook
alexSpectre has quit [Read error: Connection reset by peer]
<stacksmith> tankfeeder: what is good about illumos?
<tankfeeder> stacksmith: nothing special
<stacksmith> hah :)
<tankfeeder> just hobby like running irix server under the table
<stacksmith> Got it.
<tankfeeder> solaris and around are all dead
orivej has quit [Remote host closed the connection]
abel-normand has quit [Ping timeout: 248 seconds]
<beneroth> T
<beneroth> but there are multiple solaris-clone-based FOSS distributions
<beneroth> ah I talk unnecessarily
orivej has joined #picolisp
mtsd has quit [Quit: Leaving]
rgrau has quit [Ping timeout: 240 seconds]
coffeecup12345 has quit [Ping timeout: 248 seconds]
yumaikaspook is now known as yumaikillers
yumaikillers is now known as yumaikruger
yumaikruger is now known as yuckyikas
CorpseKeen is now known as C-Keen
<viaken> p
<beneroth> hi viaken
<viaken> hi
<viaken> How are you, beneroth?
<beneroth> tired
<beneroth> debugging
<beneroth> learning pilog
<beneroth> I think I just learned that pilog has no dynamic scoping...e.g. all required variables have to be specified as arguments for every predicate (and in every predicate "call")
<beneroth> at least that is my current guess why my code doesn't work correctly :)
<viaken> There's so much picolisp I need to learn, I'm not even sure where to start. So, I figure I'll start a project and learn the things I need for the various steps.
<beneroth> yeah
<beneroth> good technic
<beneroth> I do it also this way
<beneroth> what kind of programs you do with picolisp? scripting? database? web?
<viaken> I have projects for all 3.
<viaken> For scripting, I need to monitor a log file and run commands based on what network I'm on.
<viaken> For DB/web, I want to make a world/campaign manager for tabletop RPGs.
<viaken> brb grabbing dinner
<beneroth> nice projects
<beneroth> have a nice meal then :)
<beneroth> which tabletop games do you play?
<beneroth> I played warhammer in the past
<beneroth> well mainly 40k.. I prefer 40k
<beneroth> though I haven't played for years now :/
<beneroth> no time
<viaken> I play whatever I can convince others to join me in. :) Most recently, 10 Candles. Previously, D&D (various editions), Savage Worlds, 40k, many types of Fate, Maid....
<beneroth> well I still regularly play Pen & Papers. Currently mainly Degenesis, can I really recommend
<beneroth> Though my group plays Pen & Paper without tabletop, just with pen & paper & dices ;)
<beneroth> I'm also thinking about making some tool applications, e.g. for character sheet management (there are some mobile apps for this..but yeah, not really as handy as I would like it)
<viaken> Well, I used tabletop as a category, not a descriptor. Although, most of my playing has been in person.
<viaken> I played some Numenera (quite a lot of fun) online, but the other players weren't on board for what the GM wanted.
<beneroth> okay
<beneroth> a friend plays numenera, but haven't tried it out yet
<viaken> It's not difficult.
<beneroth> it is similar to shadow run?
<viaken> I recommend it.
<viaken> It's more similar to old school D&D, both in system and "feel", though the setting is "1,000,000 years into the future".
<beneroth> okay
<beneroth> thanks for the recommendation :)
<viaken> It's even got magic explained as nanobots in the atmosphere that respond to some evolved structure in modern humans.
<beneroth> I can really recommend you Degenesis. good, simple system, I found it the quickest so far to make a new character. and the world is really well designed. post-apocalyptic, similar to fallout games but has some other aspects.
<viaken> Nice. I'll give it a look.
<beneroth> yeah heard about this
<viaken> Already pulled up RPGGeek to remind myself. :)
<beneroth> what is RPGGeek? :D
<viaken> https://rpggeek.com/rpg/1707/degenesis - It's an RPG catalog.
<beneroth> oh nice, didn't know
<viaken> Yeah, it's handy.