Is there a list of them with examples accessible to a person without extensive category theory knowledge?
Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire(PDF) should help as well. The notation will get a bit hairy, but reading it a few times you should be able to knock down that list of yours.
Also, take a look at the recursion schemes (archived) blog post, the blogger plans on presenting each individually soon, so check back to it regularly --I guess.
Edward Kmett recently posted a Field Guide to recursion schemes, perhaps it helps?
Start with learning about catamorphisms; those are the easiest to grasp. You already know one: foldr!
Then go for anamorphisms (unfoldr) and paramorphisms. Only then go for the other Wikipedia articles/papers; by then they will be easier to understand.
Check out Tim Williams' slide on recursion schemes here:
http://www.timphilipwilliams.com/slides.html
They explain all of the *-morphisms with motivating examples of each.
Here's a start: Wikipedia "Recursion schemes" category.
Related
Title pretty much sums it up; I'm looking to start a book on programming and I love that approach.
http://www.realworldhaskell.org/blog/2008/11/25/real-world-haskell-is-shipping/
From this blog post (read the comments), it seems they used DocBook.
Particularly about indentation and under_score/camelCase/longalllowercasewords.
Good Haskell Style, by Dr. Ian Lynagh of Well-Typed.
Ian's document is good but a bit thin. I've already answered a very similar question but I added something about the case of words.
There's also http://github.com/tibbe/haskell-style-guide/blob/master/haskell-style.md, which comes with an accompanying haskell-style.el file for use with haskell-mode in Emacs.
This question may seem daft (I'm a new to 'programming' and should probably stop if this is the type of question I'm required to ask)...
What are:
"basic programs like, recursion, fibonacci, factorial, string manipulation, small trick programs"?
I've recently read Coding Horror - the non programmer and followed the links to Kegel and How to get hired.
Then I delved through some similar questions here (hence the block quote) and I realised that as a fully fledged non-programmer I probably wouldn't know if I knew recursion (or any of the others) because I wouldn't know what it looked like, or why it was used, and what the results would look like after it was used.
I suppose I'm trying to get a picture of "the basics". What the principles are and why we learn them - where they'll be used and what result/s your looking for.
If they'll be used as an interview question during my first interview sometime in 2020 I would like to look less ignorant than those 199 out of 200 who just don't know the how, or the why, of programming.
As always...I'll get my coat.
Thanks
Mike
Before you can get into concepts like recursion, you need to learn the basics, as you said. I'm not sure what your education level is or where you're planning to go with it, but my favorite programming text is "How to Think Like a Computer Scientist" (link text).
This will teach you the core fundamentals of programming, and you need to understand these building blocks before you delve deeper.
Traveling Salesman Problem
I need do write an expert systems that should aid user in picking up best mobile phone operator. It should be very simple and not based on languages/libaries such as CLISP or JESS. So I need to write it all from the ground up.
Do you know some books or online tutorials that explains how this can be done?
What I really need to get to know is how to represent knowledge and facts.
Any help would be much appreciated.
If you get any of the good texts on AI, there will be a section on expert systems; you can, if forced, work it out from there and implement your own.
The basic idea is really fairly simple: you have a collection of rules in "if-then" form that represent inferences, or4 implications. Like, for example:
IF blood temperature > 41°C
THEN patient.has-fever := TRUE
IF patient has wet-sounding breathing
THEN patient.has-pneumonia
IF patient.has-fever AND patient.has-pneumonia
THEN CONCLUDE bacterial pneumonia. ACTION prescribe Augmentin
In other words, you have a bunch of rules, and you evaluate the rules until you get to a conclusion. There's a lot more to is (forward or backward chaing and that kind of thing) which you can read about in thed pretty decent Wikipedia article.
I'm puzzled why you can't use an existing rule engine though -- there are a number of them, for most languages, usually under pretty liberal licenses. That's really an easier route unless this is a homework problem or something.
Prolog is well suited to writing rule-based systems (a pretty standard approach to expert systems development). P# compiles to C#, which may meet your needs - and it's free.
More information on P#.
The basis rationale, and mathematical proof, for the PROLOG language, should help you understand most of the concepts you will need to address, if not provide the final language you need to use to implement it.
I couldn't find a link to the original implementation, but it would not help you much anyway. Alain Colmerauer's early work on logic programming should be helpfull.
[EDIT] Sorry, duplicate...
I would vote for some implementation of Prolog or CLIPS, depending if backward or forward chaining logic best suits the problem. Instead of re-implementing either of these, spend the time working out how to integrate them with your environment.
Jess is a good choice but you should read the book "Jess in action" as a first step.
What would be a good place to go to understand arrows? Ideally, I am just looking for some place with a concise definition with motivation from some good examples, something similar to Wadler's exposition on monads.
http://en.wikibooks.org/wiki/Haskell/Understanding_arrows
I found Hughes' original paper ("Generalizing Monads to Arrows") to be fairly accessible. You can read an older draft of it here. It has some differences from the original paper, which are noted on the bibliography page of Ross Patterson's own overview of Arrows.
If you learn better from practice than theory, try using HXT for XML manipulation, or PArrows for general parsing. They both have APIs centered around arrows.