Re: Impressed but confused, gluing a list together...

emacstheviking <[email protected]>
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <CAEiEuUKPW0F2n8LQW1YU46Tm4viaA_RxtYFj=_5__iSJf0yX9A@mail.gmail.com>
Ignore the deliberate error "glue" / "join"...the real code says "join".
Sorry.


On 1 October 2013 22:03, emacstheviking <[email protected]> wrote:

> I am dong some gluing of strings together and I wanted an intercalate
> capability like many languagues offer, e.g. "join" in Javascript or
> implode() with PHP and I came up with this:
>
> join([], _, []).
> join([X], _, [X]).
> join([X|Xs], With, [X, With|Acc]) :- glue( Xs, With, Acc).
>
> The great news is that I figured it out first time and it seems to do what
> I need, I also have a flatten() predicate that will produce the final
> output string.
>
> However... I am not sure I truly understand how I did it... if I explain
> my reasoning perhaps somebody can straighten me out?
>
> Rule 1: given an empty list, return one, you can't glue nothing together.
> join([], _, []).
>
>
> Rule 2: If there is a single X in the list, return just that single X.
> That avoid "trailing" glue.
> join([X], _, [X]).
>
> Rule 3: Um...... I used the force I guess.
> join([X|Xs], With, [X, With|Acc]) :- glue( Xs, With, Acc).
>
> Having seen many other things like it I kind of sensed it would do the
> right thing but if somebody could supply me a clear explanation I'd be
> grateful. I kind of know what's going on but I can't express it to my own
> satisfation which is quite annoying right now.
>
> I "intuited" that the rule head should glue the current value of the head
> of the list with the concatenation value *With* plus whatever the
> accumulator has so far and that it should succeed if the same can be done
> with the remainder of the list but somehow I feel that I just saw E.T. ride
> off on the back of a unicorn reading a Marvel comic........
>
> Thanks.
>
>

_______________________________________________
Users-prolog mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/users-prolog
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.