Page 2 of 2
Re: Functional Programming?
Posted: Tue Jan 20, 2009 7:05 pm
by nikki
Kojack wrote:Knowing absolutely no haskell... is that actually handling rpn or just number number operation triplets? Because rpn can look like: 4 7 2 8 9 + 2 * + + *
which is 4*(7+2+(8+9)*2)
Yep, it uses a stack (not really a true stack though, its actually a linked list with pushing and popping from the front). Your expression gave me 172 with the program I wrote. I checked with the infix version in a 'usual' calculator, and it's right.
The interesting part here is the (x:y:xs) which 'deconstructs' the list. x and y get assigned to the first and second elements, xs is the list of the rest of the elements. We then assign the stack back to x * y : xs which puts the result of the operation and the rest. One way to construct list is with 'element : list'. This adds element 'element' to the front of the list 'list'. Using this construct as an lvalue 'matches' the pattern and thats how the deconstruction works.
'foldl' is a function that takes a function, an initial value, and a list. It applies the given function to the list and accumulates the result (for the first element, the initial value is taken). In this case, the list we pass is the list of space-seperated words in the expression, and the function is our pattern matching one. 0 is the initial value. Then the patterns are matched (pattern ma'tching is a 'usual' thing, its how parameters to a function are assigned), and the appropriate operation is carried out, and the accumulated value is set to x (op) y : xs (where (op) is the appropriate operator).
Haskell allows you to do some pretty cool things because of its laziness. You can print infinite lists. Because its lazy, they don't get evaluated yet, and it evaluates them
as they're being printed. This is an awesome example, it gives an infinite list of fibonacci numbers:-
Code: Select all
fib = 0 : 1 : zipWith (+) fib (tail fib)
The way it does it is really awesome. The 'tail' function just returns the list with its first element removed. 'zipWith' carries out the given operation on the corresoponding elements of the two lists given. Basically, we just add the sequence to a tailed version of itself recursively and get the series:-
Code: Select all
0 : 1 : zipWith (+) (0 : 1 : ...) (1 : ...)
0 : 1 : (0 + 1) : zipWith (+) (1 : 1 : ...) (1 : ...)
0 : 1 : 1 : (1 + 1) : zipWith (+) (1 : 2 : ...) (2 : ...)
0 : 1 : 1 : 2 : (1 + 2) : zipWith (+) (2 : 3 : ...) (3 : ...)
Haskell is lazy, so we don't need the whole list any way. Its done 'on demand'.
I can feel the brain expansion effect kick-in. Haskell really makes you think differently.

Re: Functional Programming?
Posted: Tue Jan 20, 2009 10:08 pm
by Kojack
Cool.
I thought the (x:y:xs) was doing a pattern match against the input, getting 2 numbers and a symbol.
If you want something which really makes you think differently, try what I call Constructive Solid Computing.
Basically build a program using physics in a game.
I first played around with it on Quake 1, when a guy showed how you could build the standard logic gates (and, or, not) and more complicated things like flipflops (bistable multivibrators, for those who live in regions where people think a flipflop is a form of footwear) using doors and nail gun turrets. He demoed the technique by using binary logic for a combination lock, but you could do more advanced stuff with it (without touching a line of scripting code. I've also seen a half adder circuit built in Armadillo Run, and of course the calculator built in Little Big Planet.
One of my current goals is to implement a fully working Brainfuck interpreter using game physics. I might try it in halflife 2.
I might have to supply the code to run via a conveyor belt, different positions across the belt are different opcodes.

Re: Functional Programming?
Posted: Wed Apr 15, 2009 5:56 am
by jacmoe
Sod Functional Programming - el33t programmers uses esoteric programming languages, like LOLCODE!
Code: Select all
HAI
CAN HAS STDIO?
I HAS A VAR
IM IN YR LOOP
UP VAR!!1
IZ VAR BIGGER THAN 10? KTHX
VISIBLE VAR
IM OUTTA YR LOOP
KTHXBYE
Pretty cool language!
I am not kidding:
http://en.wikipedia.org/wiki/LOLCODE
<edit>
I wonder how it would feel if Ogre was written in LOLCODE..
</edit>
Re: Functional Programming?
Posted: Wed Apr 15, 2009 1:27 pm
by nikki
LOLCODE is lol. I've seen it before. Not really practically tried it though.
Re: Functional Programming?
Posted: Sun Jun 07, 2009 8:48 am
by jacmoe
xavier wrote:Functional programming is still an academic pursuit; the problem is that the systems we write for are still linear/procedural processors -- Von Neumann architecture -- and are not well-suited for functional programming. That's why C/C++ and it's close relatives still rule the roost, so to speak.
Interestingly, I've found it to be quite the reverse, with Lisp:
Lisp maintains the Van Neuman model; there is no sharp, pre-determined border between code and data. Programming in Lisp opens your mind to the power of the Van Neumann model. Programming in Lisp makes you see old concepts in a new light.
http://stackoverflow.com/questions/4724 ... 3696#63696
Mainstream languages, like C++, are slowly moving towards Lisp, but still not quite there yet.

It's amazing how advanced that old language is!
I am at day 3 of my Lisp journey, and have already used lambdas and higher order functions.
Lisp is a perfect language for games.
SuperMario 64 was programmed entirely in Lisp ->
http://www.franz.com/success/customer_a ... imen.lhtml
Abuse was programmed in C, but used Lisp for logic. ->
http://en.wikipedia.org/wiki/Abuse_(computer_game)
But also data driven development, because code and data is unified in Lisp.
I never thought it would have happened, but here I am, programming Lisp in Emacs.

Re: Functional Programming?
Posted: Sun Jun 07, 2009 9:12 am
by xavier
Lisp is an excellent language for expanding your programming consciousness.
Unfortunately, it's also a horrid language for most or the tasks involved with game programming except at the "scripting" layer; for example, trying to work with a graphics API is apples and oranges (with Lisp playing the citrus role). Games *have* been made with it, but it's not as straightforward as it sounds. NaughtyDog spent at least a year making a suitable compiler and dev framework for the game they did in Lisp, so it's not like we can drop everything and start porting Ogre to Lisp.
That's why I still think D is going to be the best practical incremental step away from C++, because it natively supports, with no "bindings" needed, the C-based APIs that we program against in games: the console runtimes, the Win32 API, Linux, etc. It just needs real tool support (i.e. it needs to run in Visual Studio with full debugging support) *and* needs to have dev support on the major consoles, before it "catches on".
Re: Functional Programming?
Posted: Sun Jun 07, 2009 9:14 am
by xavier
jacmoe wrote:Sod Functional Programming - el33t programmers uses esoteric programming languages, like LOLCODE!
Code: Select all
HAI
CAN HAS STDIO?
I HAS A VAR
IM IN YR LOOP
UP VAR!!1
IZ VAR BIGGER THAN 10? KTHX
VISIBLE VAR
IM OUTTA YR LOOP
KTHXBYE
Pretty cool language!
I am not kidding:
http://en.wikipedia.org/wiki/LOLCODE
<edit>
I wonder how it would feel if Ogre was written in LOLCODE..
</edit>
I HAS A HAPPI!!!
Re: Functional Programming?
Posted: Sun Jun 07, 2009 9:37 am
by jacmoe
While it would be *interesting* to do the whole game in Lisp, I was thinking about having the logic in Lisp and the low-level stuff in C++.
Imagine having a self-modifying logic layer.

Data driven development? No problem in Lisp.
And the performance is actually quite good, if you compare to other languages.
Using ECL, you can easily use Lisp and C++ together.
About LOLCODE: would be a good exercise to program a LOLCODE interpreter in Lisp. *puts on todo*
But D is *so* on my list of languages to try.
My only concern is that it would probably mess up my C++.
Re: Functional Programming?
Posted: Sun Jun 07, 2009 11:48 am
by Brocan
Functional programming is the hell, and lisp the devil

Re: Functional Programming?
Posted: Sun Jun 07, 2009 1:21 pm
by nikki
jacmoe wrote:I never thought it would have happened, but here I am, programming Lisp in Emacs.

Nooo! Use (g)vim! I've used it with Lisp, there's a Lisp plugin that provides features similar to the Lisp features in Emacs.
Re: Functional Programming?
Posted: Sun Jun 07, 2009 1:48 pm
by jacmoe
Actually, I stopped using Emacs fairly quickly.
<edit>Not because Emacs is bad. It's just looking really, really ancient.</edit>
Now I'm using
ABLE, which is a dead nice Lisp editor, although I miss a debugger.
Does Vim connect to SLIME or similar?
Re: Functional Programming?
Posted: Sun Jun 07, 2009 3:24 pm
by mkultra333
Since esoteric programming languages came up, I just want to make sure people are aware of Malbolge,
http://en.wikipedia.org/wiki/Malbolge
Malbolge is a public domain esoteric programming language invented by Ben Olmstead in 1998, named after the eighth circle of hell in Dante's Inferno, the Malebolge.
The peculiarity of Malbolge is that it was designed to be the most difficult and esoteric programming language.
...
Malbolge was so difficult to understand when it arrived that it took two years for the first Malbolge program to appear. The program was not even written by a human being: it was generated by a beam search algorithm designed by Andrew Cooke and implemented in Lisp.
...
This Malbolge program displays "Hello world!", with full capitalization and exclamation mark at the end.
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"
`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
Edit: Oh, just noticed there's a Malbolge SDK.
http://blol.org/735-malbolge-desmistificado. It's in Portuguese, but that'll probably be the least of any user's problems. I think I'll implement Malbolge as my project's scripting language.
Re: Functional Programming?
Posted: Sun Jun 07, 2009 3:45 pm
by Kojack
Lolcode has a .net version. I was thinking of trying it with Mogre.

Re: Functional Programming?
Posted: Wed Jun 10, 2009 8:39 am
by jacmoe
nikki wrote:jacmoe wrote:I never thought it would have happened, but here I am, programming Lisp in Emacs.

Nooo! Use (g)vim! I've used it with Lisp, there's a Lisp plugin that provides features similar to the Lisp features in Emacs.
Emacs rocks!

- emacs.jpg (96.39 KiB) Viewed 4345 times
Code completion, intelligent code sense, interactive Lisping - Emacs is perfect for that kind of stuff.
(Never thought I'd ever say that!)
And, no: I am not into "Dixie Chicks" - it's one of the practical examples from Practical Common Lisp.

Re: Functional Programming?
Posted: Wed Jun 17, 2009 12:20 am
by ceninan
jacmoe wrote:
I never thought it would have happened, but here I am, programming Lisp in Emacs.
I know the feeling - I picked up Clojure just recently. Me, programming Lisp off my own accord? And at that, using vim keybindings!?

Not to mention doing it using Java libraries

.
I never did get used to emacs. Far too much configuration neccessary IMO. And although I've had some bad experiences with vi in the past ("how do I quit/write/do anything!?"), I actually liked it once I did the vimtutor.
That emacs setup is looking
much nicer than the default slime buffers, by the way. I think I'll stick to NetBeans and jVi though

.
PS: Haskell scares me. I've always thought that it looks really cool, but whenever I take a closer look, my "heavy math" warning senses begins to tingle.
Re: Functional Programming?
Posted: Fri Jun 19, 2009 12:12 am
by nikki
jacmoe wrote:nikki wrote:jacmoe wrote:I never thought it would have happened, but here I am, programming Lisp in Emacs.

Nooo! Use (g)vim! I've used it with Lisp, there's a Lisp plugin that provides features similar to the Lisp features in Emacs.
Emacs rocks!
emacs.jpg
Code completion, intelligent code sense, interactive Lisping - Emacs is perfect for that kind of stuff.
(Never thought I'd ever say that!)
Whatever.

I've been using (g)vim for quite a while (with the code completion) and stuff, and I absolutely love it. Once you get it configured well, it's really cool, the amount of editing you can do with just a few keystrokes. Emacs might win on the Lisp side, but (g)vim's good for Lisp too, I'd been using it with the 'Practical Common Lisp' book.
jacmoe wrote:And, no: I am not into "Dixie Chicks" - it's one of the practical examples from Practical Common Lisp.

Yeah, great book.

Re: Functional Programming?
Posted: Wed Jun 24, 2009 4:06 pm
by warmi
xavier wrote:Lisp is an excellent language for expanding your programming consciousness. ,,
Yeah, it is like classical education ... it makes for an excellent topic for all kinds of social (or in this case geeky) gatherings but beyond that hardly anybody has any use for it in the “real word”.
Re: Functional Programming?
Posted: Wed Jun 24, 2009 4:48 pm
by jacmoe
warmi wrote:Yeah, it is like classical education ... it makes for an excellent topic for all kinds of social (or in this case geeky) gatherings but beyond that hardly anybody has any use for it in the “real word”.
I wonder what real world you're in.

Data miners, flight reservation systems, ...
That the language is not mainstream doesn't make it any less useful. Some people realise that.
Lisp is especially well suited to larger, more complex software systems.
Re: Functional Programming?
Posted: Wed Jun 24, 2009 5:54 pm
by warmi
jacmoe wrote:warmi wrote:Yeah, it is like classical education ... it makes for an excellent topic for all kinds of social (or in this case geeky) gatherings but beyond that hardly anybody has any use for it in the “real word”.
I wonder what real world you're in.

Data miners, flight reservation systems, ...
That the language is not mainstream doesn't make it any less useful. Some people realise that.
Lisp is especially well suited to larger, more complex software systems.
Well, when I wrote nobody I didn't literally mean nobody ... think of it as a statistical version of "nobody".
In any case, that's just my personal opinion .. I spent some time programming in Lisp ( college) and found it to be convoluted and non-intuitive - yeah , it does make programming certain tasks much more natural and kind of neat but overall not my cup of tea.
Re: Functional Programming?
Posted: Thu Jun 25, 2009 8:19 am
by aerique
warmi wrote:In any case, that's just my personal opinion .. I spent some time programming in Lisp ( college)
I've said this in another thread but nothing kills people's enthusiasm for Lisp faster than some professor's convoluted programming problems.
Also Lisp is a family of languages and doesn't specify one specific programming language. For example there's Scheme, a very minimal and pure language generally used at colleges. There's Common Lisp, my favourite, which is very complete and has many warts because of it. There's also Emacs Lisp used in the editor with the same name and many more.
warmi wrote:and found it to be convoluted and non-intuitive - yeah , it does make programming certain tasks much more natural and kind of neat but overall not my cup of tea.
I think people have a specific disposition for programming languages because not everyone's brain works the same way and not everyone approaches problems in the same way. So Lisp might indeed not be your cup of tea, like Algol like languages are not my cup of tea
Also Common Lisp isn't strictly functional. It is a multi-paradigm language. For anyone interested: check out
Practical Common Lisp, a great book.