# Learn Prolog Now: Request for contribution

**URL:** <https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119>\
**Category:** Looking for Group\
**Created:** [August 27, 2019, 5:02pm UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119 "2019-08-27T17:02:53Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![PaulBrownMagic](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/paulbrownmagic/32/211_2.png) [@PaulBrownMagic](https://swi-prolog.discourse.group/u/PaulBrownMagic)\
**Post date:** [August 27, 2019, 5:02pm UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/1 "2019-08-27T17:02:53Z")

</div>

Wanting to expand PrologHub into a more rounded community service I thought it’d be great to revamp _Learn Prolog Now!_ into an interactive online book with a little more modern design.

By the terms of the original license, this version is also shared under the same Creative Commons Attribution license, meaning once this work is done it’ll be easier to maintain in the future, especially seen as we’re moving the content into Prolog from Latex. For example a more robust [lpn.swi-prolog.org](http://lpn.swi-prolog.org) version with SWISH would likely only require changing one file. Under the Attribution license, contributors will be attributed!

Chapter 1 is available as a preview here: [lpn.prologhub.pl](http://lpn.prologhub.pl/), checkout the interactive code and quizzes.

If you’d like to help, take a look at the [Chapter 1 objects](https://github.com/PaulBrownMagic/lpn/tree/master/www/book/chapters/chapter1). You can pick a chapter from the book, and create `section1.lgt`, `section2.lgt` (These are the numbered headings in the chapter), and `section4.lgt` (The practical session), following the same pattern as in Chapter1. (`section3.lgt` being the quizzes is a bit more tricky, but you can always extend `leaf_section` as a placeholder if you’re feeling brave).

To do this is mostly a case of copying and pasting ([learnprolognow.org](http://learnprolognow.org) is handy here), and putting in the appropriate markup. We have `\inline_code/1`, `\static_code_block/1`,  
`\code_block/2` and `\code_query/2` components declared here: [code\_components](https://github.com/PaulBrownMagic/lpn/blob/06e897a159095bd3d60375f40afe6b906e1a1cab/www/html_components/code_components.pl).

Doing this will be a huge help, freeing up time to spend on implementing all those tricky quiz types. Plus, we’ll have a version of _Learn Prolog Now!_ that other languages will be envious of…

---

<div class="post-metadata">

**Author:** ![grossdan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/grossdan/32/23_2.png) [@grossdan](https://swi-prolog.discourse.group/u/grossdan)\
**Post date:** [August 28, 2019, 9:40am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/4 "2019-08-28T09:40:29Z")

</div>

In my opinion i would not focus on teaching prolog for beginners.

To increase adoption in industry i would focus on experienced programmers.

Instead of a tutorial style how about a community effort to document an existing non trivial code base. Say the pengine library.

And the enrich the documentation with background information…  
It would be enough to reference on the web relevant background info …

What do you think …

Dan

---

<div class="post-metadata">

**Author:** ![EricGT](https://avatars.discourse-cdn.com/v4/letter/e/f1d935/32.png) [@EricGT](https://swi-prolog.discourse.group/u/EricGT)\
**Post date:** [August 28, 2019, 10:31am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/5 "2019-08-28T10:31:10Z")

</div>

> [@grossdan](#):
>
> In my opinion i would not focus on teaching Prolog for beginners.

I’ll have to disagree with that. That is not disagreeing with what else you suggest or offering to help with your ideas.

IMHO many people are able to self-learn a [procedural](https://en.wikipedia.org/wiki/Procedural_programming) programming languages like C or Basic because it is like learning how to follow a recipe. [Object-Oriented](https://en.wikipedia.org/wiki/Object-oriented_programming) concepts build on procedural so is a standard progression in [programming paradigms](https://en.wikipedia.org/wiki/Programming_paradigm). Some even make it further on their own to [functional](https://en.wikipedia.org/wiki/Functional_programming) programming, but many never make it on their own to Prolog and many who do try to self-learn Prolog fail. Even some of us who take Prolog as a university course consider that we did not successfully learn Prolog. If I had not had help in trying to fill in the parts I did not get correctly in the class, I would still not be using Prolog to this day.

I think there are many people out there who desire to learn and use Prolog, or who have to use Prolog but would like to use it while enjoying it instead of struggling with it. Those people also need help and so by starting at the lowest level and constructively working up is how I plan to contribute. That doesn’t not mean I will not not help others in this endeavor of adding learning material, but that the bottom-up constructive approach will be my main focus.

---

<div class="post-metadata">

**Author:** ![grossdan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/grossdan/32/23_2.png) [@grossdan](https://swi-prolog.discourse.group/u/grossdan)\
**Post date:** [August 28, 2019, 10:50am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/6 "2019-08-28T10:50:39Z")

</div>

Hi Eric

I dont disagee with you, it is for beginners in Prolog, but not for beginners in programming.

I think it is very unlikely that someone completely new to programming will choose prolog as a first language. Python, Java, Javascrip or C++ is much more likely… With each having functional extensions.

For professional programmer you can build on the functional approach and focus on key paradigms such as relational programming.

How about we outline what is needed to make this discussion concrete.

For adoption in industry you cant target junior staff but the staff that makes language choice decisions.

Dan

---

<div class="post-metadata">

**Author:** ![PaulBrownMagic](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/paulbrownmagic/32/211_2.png) [@PaulBrownMagic](https://swi-prolog.discourse.group/u/PaulBrownMagic)\
**Post date:** [August 28, 2019, 10:58am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/7 "2019-08-28T10:58:31Z")

</div>

I see it like this.

Every semester I’ll have in influx of student traffic. I should provide a good service for them and encourage them to stick with it. This same service will be suitable for all beginners.

With more people sticking with Prolog we’ll have more people wanting to use the language. These people will know the basics but find themselves wondering how to use it in their domain. So after _LPN!_ they’ll need domain specific tutorials, like web, data ETL, AI, CLP, etc. After this they’d be ready for some junior role in industry, but these are notably absent in Prolog.

Starting alongside domain specific tutorials and working towards senior roles, Prolog programmers wish to learn how to code well. This is where deep dives into existing projects, how to use particular libraries and code-alongs come in. This is where I view a structured investigation of pengines would go. The blog captures the unstructured things.

My aim is to capture more beginners and to support them all the way through. My hope is that increasing the number of competent and passionate Prolog programmers will be reflected in industry simply because more people want to use it and are capable of doing so.

To accomplish this with PrologHub, we’re starting at the beginning. How far we can go depends on how much time can be dedicated to it, which is why it’s **all** open source.

For something close to my vision in a language with similar difficulties that’s improving its lot, check out [Monday Morning Haskell](https://mmhaskell.com/)

---

<div class="post-metadata">

**Author:** ![EricGT](https://avatars.discourse-cdn.com/v4/letter/e/f1d935/32.png) [@EricGT](https://swi-prolog.discourse.group/u/EricGT)\
**Post date:** [August 28, 2019, 11:04am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/8 "2019-08-28T11:04:15Z")

</div>

> [@grossdan](#):
>
> I think it is very unlikely that someone completely new to programming will choose Prolog as a first language.

I agree with that and even oppose teaching Prolog as a first programming language; especially at the high school level.

> [@grossdan](#):
>
> How about we outline what is needed to make this discussion concrete.

Sounds good. I will start a new topic on that so that others can join.

---

<div class="post-metadata">

**Author:** ![pmoura](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/pmoura/32/11_2.png) [@pmoura](https://swi-prolog.discourse.group/u/pmoura)\
**Post date:** [August 28, 2019, 11:18am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/9 "2019-08-28T11:18:24Z")

</div>

Facing the same challenge in Logtalk - how best to help new users learn the language - some things that proved to make a difference are:

1. A **short tutorial** highlighting the main features. I opted for a “Learn X in Y minutes” [tutorial](https://learnxinyminutes.com/docs/logtalk/). There’s also one for [Prolog](https://learnxinyminutes.com/docs/prolog/) with room for improvement (hint, hint, …). These short, **one page** , tutorials **can be read in minutes** and are great for curious people wanting a **quick taste of a language**. They can work as a motivator for more in depth leaning materials such as _Learn Prolog Now!_

2. **Explain** what’s [different](https://logtalk.org/manuals/userman/declarative.html) compared with other languages/paradigms. The biggest challenge here in my case is to explain how declarative OOP differs from traditional imperative OOP. For Prolog, that could mean explaining _logical variables_, _unification_, _backtracking/non-determinism_, _homoiconicity_ **while comparing** with imperative languages. This is already available in some Prolog learning materials but not (?), IIRC, with a strong emphasis in comparing.

3. Explain the [lingo/jargon](https://logtalk.org/manuals/userman/nomenclature.html), again **comparing** with other languages/paradigms. The **same technical term** (e.g. _variable_) often have **different meaning in different languages**. This can be quite confusing for new users. Of course, also provide an easy to find [glossary](https://logtalk.org/manuals/glossary.html).

Hope this helps.

---

<div class="post-metadata">

**Author:** ![EricGT](https://avatars.discourse-cdn.com/v4/letter/e/f1d935/32.png) [@EricGT](https://swi-prolog.discourse.group/u/EricGT)\
**Post date:** [August 28, 2019, 12:38pm UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/11 "2019-08-28T12:38:40Z")

</div>

5 posts were split to a new topic: [Teaching Prolog as first programming language](https://swi-prolog.discourse.group/t/teaching-prolog-as-first-programming-language/1126)

---

<div class="post-metadata">

**Author:** ![PaulBrownMagic](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/paulbrownmagic/32/211_2.png) [@PaulBrownMagic](https://swi-prolog.discourse.group/u/PaulBrownMagic)\
**Post date:** [August 28, 2019, 11:45am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/12 "2019-08-28T11:45:37Z")

</div>

Sorry, typo! I meant ETL: Extract, Transform and Load.

---

<div class="post-metadata">

**Author:** ![grossdan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/grossdan/32/23_2.png) [@grossdan](https://swi-prolog.discourse.group/u/grossdan)\
**Post date:** [August 28, 2019, 2:46pm UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/14 "2019-08-28T14:46:24Z")

</div>

Hi,

Looking at the material, i, unfortunately, find it hard to follow – the tutorial show how to use a construct, but not what practical problem the construct comes to solve, and how it fits in a bigger picture of problem solving

For example, to show that a list can be encapsulated in an object construction, help use them, but doesn’t explain why and in what situation one wants to do this, and not, say, use a standard Prolog module.

I guess i favor learning through larger problems where constructs use is shown in solution development context.

For example, how to make client code of the list object oblivious of the particular subclass of list object it makes use of, which helps make the client code more stable, while allowing to vary the kind of list (and list implementation?) to use.

thank you,

Dan

p.s. btw, i think it would have been better to have a category example that does not use assert / retract to record properties but rather a relational approach – such as by use of assoc. just, so to convey today’s best practices by way of other examples as well.

Would using, say, an assoc, be the right way to have changing values in an object?

---

<div class="post-metadata">

**Author:** ![pmoura](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/pmoura/32/11_2.png) [@pmoura](https://swi-prolog.discourse.group/u/pmoura)\
**Post date:** [August 28, 2019, 3:35pm UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/15 "2019-08-28T15:35:15Z")

</div>

> [@grossdan](#):
>
> Looking at the material, i, unfortunately, find it hard to follow – the tutorial show how to use a construct, but not what practical problem the construct comes to solve, and how it fits in a bigger picture of problem solving
> 
> For example, to show that a list can be encapsulated in an object construction, help use them, but doesn’t explain why and in what situation one wants to do this, and not, say, use a standard Prolog module.

No tutorial can be everything for everyone. A short tutorial aiming to give a quick taste of a language doesn’t target problem solving in general. For that, other material exists (with, of course, ample room for improvement). An example closer to actual problem solving is the collection of sample implementations of design patterns already mentioned. Some interesting cases can also be found in StackOverflow (search for the `logtalk` tag). E.g. [Structuring SWI-Prolog Code into Modules for Unit Testing of Multiple Algorithms and Data Sets - Stack Overflow](https://stackoverflow.com/questions/57341339/structuring-swi-prolog-code-into-modules-for-unit-testing-for-varying-data-sets/57347452#57347452)

P.S. There isn’t such a thing as a “standard Prolog module system”, although it continues to be a persistent [myth](https://logtalk.org/rationale.html#portability). Wishful thinking, I guess.

> [@grossdan](#):
>
> I guess i favor learning through larger problems where constructs use is shown in solution development context.

Some of the [bundled](https://github.com/LogtalkDotOrg/logtalk3/tree/master/examples) examples are not trivial and can help showing that. More upcoming [blog](https://logtalk.org/blog.html) posts also will focus on non-trivial problem solving.

> [@grossdan](#):
>
> For example, how to make client code of the list object oblivious of the particular subclass of list object it makes use of, which helps make the client code more stable, while allowing to vary the kind of list (and list implementation?) to use.

The SO answer linked above highlights some of the technical solutions to do that. Happy to followup but in a different thread to avoid going off topic in this one.

> [@grossdan](#):
>
> p.s. btw, i think it would have been better to have a category example that does not use assert / retract to record properties but rather a relational approach – such as by use of assoc. just, so to convey today’s best practices by way of other examples as well.

I assume you mean the tutorial in the Handbook. Agree, that tutorial, including that particular example, is quite old (almost +20 years!) and much better examples exist.

Thanks for the feedback.

---

<div class="post-metadata">

**Author:** ![EricGT](https://avatars.discourse-cdn.com/v4/letter/e/f1d935/32.png) [@EricGT](https://swi-prolog.discourse.group/u/EricGT)\
**Post date:** [August 29, 2019, 10:48am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/16 "2019-08-29T10:48:38Z")

</div>

Here is some constructive feedback.

I haven’t checked all of your LPN site yet but found

* * *

[.3.2 Atoms, Variables, and Complex Terms](http://lpn.prologhub.pl/section/1.3.2)

So I checked

[ISO/IEC 13211-1:1995(E)](https://webstore.ansi.org/Standards/INCITS/INCITSISOIEC132111995R2017) AKA the ISO standard for Prolog

The word compound is used, the word complex is not used.

* * *

In [1.3.3 Functor and Arity](http://lpn.prologhub.pl/section/1.3.3) you have

kills(Butch, Vincent)

enough said.

---

<div class="post-metadata">

**Author:** ![PaulBrownMagic](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/paulbrownmagic/32/211_2.png) [@PaulBrownMagic](https://swi-prolog.discourse.group/u/PaulBrownMagic)\
**Post date:** [August 29, 2019, 11:36am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/17 "2019-08-29T11:36:11Z")

</div>

Indeed, this is the book as written by Patrick Blackburn, Johan Bos, and Kristina Striegnitz, who say this in their license notice:

> The authors would like to maintain backwards compatibility with the printed, published version of LPN. That is, ideally numbers of chapters and exercises shouldn’t change, but still allow for the possibilities to add new exercises, sections or even chapters.

The authors have left scope for updates and edits, and we’re forced to change the number of exercises to make the auto-marking work. Should we make edits in the HMTL though, they shan’t be reflected in the Latex, which would be a technical barrier to an updated second edition of the printed book, perhaps not an insurmountable problem.

But my main reason for not editing is that the transfer to termerized HTML is a monumental task, hence my request for collaboration. I do not wish to burden collaborators with the extra responsibility of editing the content. To do so would not only discourage contribution, but it would result in a product that reads like every chapter is written by a different author.

The first step in this project, as in all software projects, is to get the thing working. With that accomplished it will be a relatively easy matter to maintain, such as editing or adding a chapter. It will also be easier to add new features, such as my dream of it being able to track user learning for users.

---

<div class="post-metadata">

**Author:** ![EricGT](https://avatars.discourse-cdn.com/v4/letter/e/f1d935/32.png) [@EricGT](https://swi-prolog.discourse.group/u/EricGT)\
**Post date:** [August 29, 2019, 11:38am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/18 "2019-08-29T11:38:32Z")

</div>

> [@PaulBrownMagic](#):
>
> The authors would like to maintain backwards compatibility with the printed, published version of LPN. That is, ideally numbers of chapters and exercises shouldn’t change, but still allow for the possibilities to add new exercises, sections or even chapters.

Thanks, understood. ([License](https://github.com/LearnPrologNow/lpn/blob/master/COPYING))

EDIT

So I checked the [PDF](http://www.dbnet.ece.ntua.gr/~adamo/csbooksonline/prolog-notes.pdf) which predates the site and sure enough the word `complex` and predicate `kills/2` were used in the original document.

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [August 29, 2019, 11:39am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/19 "2019-08-29T11:39:14Z")

</div>

Great project!

> [@PaulBrownMagic](#):
>
> For example a more robust [lpn.swi-prolog.org](http://lpn.swi-prolog.org) version with SWISH would likely only require changing one file.

That would be really great. The current [lpn.swi-prolog.org](http://lpn.swi-prolog.org) works as a rewriting proxy on the original site. That is not really ideal. The re-writing injects a JavaScript file and analyzes the code sections on the page, trying to figure out what is a program and what are example queries on that program. This is pretty tricky. Worse, sometimes you have to combine multiple source code fragments or even replace a clause in a previous code fragment to get the final code for running the examples. Ideally this should be annotated with the code fragment and then if the JavaScript is included in the main side, you’ll have a perfect interactive SWISH side (SWISH isn’t embedded there, the lpn site simply calls out to [swish.swi-prolog.org](http://swish.swi-prolog.org)).

Do you plan to include sufficient information to make it possible to create the program and exemple queries reliably? One crude solution might be to have an optional `\hidden_code` or something similar, so the rule becomes

- If we find a sequence _code_, _hidden code_, _queries_, send the hidden code to SWISH
- for _code_, _queries_ send code to SWISH.

Of course, the web side should ot show the hidden code (pass on using `display:none`)

---

<div class="post-metadata">

**Author:** ![EricGT](https://avatars.discourse-cdn.com/v4/letter/e/f1d935/32.png) [@EricGT](https://swi-prolog.discourse.group/u/EricGT)\
**Post date:** [August 29, 2019, 11:45am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/20 "2019-08-29T11:45:09Z")

</div>

> [@jan](#):
>
> This is pretty tricky. Worse, sometimes you have to combine multiple source code fragments or even replace a clause in a previous code fragment to get the final code for running the examples

In working with the site (LPN with SWISH), that was one of the main problems I had with many examples that did not work correctly in SWISH and one of the reasons I choose not to pursue working with LPN with SWISH.

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [August 29, 2019, 11:52am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/21 "2019-08-29T11:52:54Z")

</div>

This really requires human annotation to get right. Note that we can validate the entire book for consistent SWISH annotations quite easily if we knew the answer to each query. Even without it is not hard to write a little javascript that sends the code fragments and their queries to SWISH and check they actually run.

I’d be happy to help with some of that. Note that if the entire pipeline works it is a great thing to have and extend/reuse for teaching more advanced Prolog.

---

<div class="post-metadata">

**Author:** ![PaulBrownMagic](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/paulbrownmagic/32/211_2.png) [@PaulBrownMagic](https://swi-prolog.discourse.group/u/PaulBrownMagic)\
**Post date:** [August 29, 2019, 11:53am UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/22 "2019-08-29T11:53:07Z")

</div>

The one file is the one containing all of the [code components](https://github.com/PaulBrownMagic/lpn/blob/91d01635180d9bcd739fc6d887f6a46537494a76/www/html_components/code_components.pl).  
(the `html_write:` prefixes are so they can work with Logtalk objects, this is one of the first things I’ll change in the optimisation phase, so they’ll all be in one object)

We denote an inline bit of code and a static code block, which aren’t supposed to be interactive. (`\inline_code//1`, `\static_code_block//1`)

For interactive bits of code we have `\code_block/2`, which takes a unique ID for that code block, and some code. We then have `\code_query//2`, which takes that ID for the code to be queried and a query. The final block is `\code_query//1`, which is for a query that doesn’t need any additional code. An example pairwise use is in [section 1, lines 23 and 32](https://github.com/PaulBrownMagic/lpn/blob/91d01635180d9bcd739fc6d887f6a46537494a76/www/book/chapters/chapter1/section1.lgt)

The unique ID should mean that we have no need to search for sequences, when we find a query: look up the code with the matching ID and send it to SWISH.

I have not yet encountered an example that needs hidden code, but I imagine I’ll just add a `\hidden_code_block//2` component and allow a `\code_query//2` to accept a list of IDs.

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [August 29, 2019, 12:28pm UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/23 "2019-08-29T12:28:51Z")

</div>

FYI

Looking at the github repo, the README says _“It’s probably possible to write a parser that’ll take the Latex and spit out termarized HTML, but it might prove to take longer.”_

It is probably not a priority, but SWI-Prolog comes with its own Prolog based translation from LaTeX to HTML in `packages/ltx2htm`. This is used for the documentation. It differs from the standard tools to do so (at least, when I wrote it) in trying to do a high level mapping rather than a low level one that produces hard-to-read HTML. The thing consists of a C LaTeX tokenizer that creates a giant Prolog term and a Prolog converter. The code is really old though and mainly maintained to keep the documentation pipeline running. I guess I’d design in differently now 🙂

---

<div class="post-metadata">

**Author:** ![PaulBrownMagic](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/paulbrownmagic/32/211_2.png) [@PaulBrownMagic](https://swi-prolog.discourse.group/u/PaulBrownMagic)\
**Post date:** [August 29, 2019, 12:31pm UTC](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119/24 "2019-08-29T12:31:00Z")

</div>

Hmm, I shall have to see what it can do for us, even if it only pulls out the paragraphs it’d already be a help!

[Next page](https://swi-prolog.discourse.group/t/learn-prolog-now-request-for-contribution/1119.md?page=2)
