Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Functional programming versus imperative

Author: Vincent Diepeveen

Date: 09:06:35 02/18/04

Go up one level in this thread


On February 18, 2004 at 10:50:43, Anthony Cozzie wrote:

>On February 18, 2004 at 10:32:15, Vincent Diepeveen wrote:
>
>>On February 18, 2004 at 08:55:45, Anthony Cozzie wrote:
>>
>>>At CMU, I took 15-212 (Functional Programming).  Basically, we learned Standard
>>>ML (ML stands for metalanguage) and wrote some rather complex stuff, including a
>>>parser/typechecker/runtime environment for a small Logo-like language (it
>>>included functions, and custom types if I remember correctly).
>>>
>>>Basically, it took most people a while to transition from C to ML.  Some people
>>>never did it.  I had one friend who, while an incredibly sharp C/assembly coder
>>>(currently getting his PhD at CMU in signal processing) just didn't "get" ML.
>>>It is simply different, and if you try to write C-ish ML you will fail
>>>miserably.
>>>
>>>ML allows you to write some amazingly compact and readable programs.  I seem to
>>>remember posting an implementation of regular expressions in ML - it is about 25
>>>lines, versus several hundred for a C implementation.  I made far fewer mistakes
>>>in ML than in C, and most of those were caught by the type-checker, not at
>>>runtime.  If you can get a program to "compile" in ML, there is at least a 50%
>>>chance it will work perfectly on the first run.
>>>
>>>Standard ML is about 10 times slower than C.  OCAML, the french version, is
>>>about 50% slower.  I don't think functional languages are a good idea for
>>>writing chess programs, but they certainly have their place.
>>>
>>>anthony
>>
>>Professor Swierstra (functional programming) focussed for a few years our
>>attention upon functional programming languages being so good in parsing.
>>
>>Especially with a few Haskell scripts he had copied from somewhere you could
>>very well parse stuff.
>>
>>After a few years i was so sick from this guy (he's even more stubborn than Uri
>>Blass) that i took a bet.
>
>Impossible.  No one is more stubborn than Uri :)
>
>>Someone who had written his thesis about functional programming and who was
>>giving courses functional programming took the bet.
>>
>>We both would write a CGI script. He in gofer + haskell. Diep in C.
>>
>>The cgi script had to parse certain things from submissions and needed to get
>>parsed in the CGI script then a HTML form had to get shipped back to the WWW
>>server. Of course it had to be bugfree.
>>
>>I took me 30 minutes to write this in C.
>>
>>It took him a week to get it to work in gofer.
>>
>>In fact he didn't finish a buggy version until 2 days after the bet.
>
>I think it is a bit premature to dismiss a family of languages based one 1
>person's attempt on 1 problem in 1 language.  I have never worked with this
>gopher, or even lisp for that matter.
>
>>Additionally his gofer thing was hell slow of course. Lazy evaluation you
>>know... ...it's dead slow!
>
>Of course.  Sometimes it doesn't matter, though.
>
>>Anyone defending functional languages should know better. Any nonsense that is
>>claimed about the languages doing better than imperative languages is a big
>>nonsense.
>>
>>Even quickbasic + 1 string lib beats the hell out of it.
>>
>>You see, no one has written huge programs with it. That's the problem. As soon
>>as you have to commercially work, you have to be above that 0.5 source code
>>lines an hour.
>>
>>In such functional languages you don't manage, but in C/C++/JAVA/c# you will
>>easily get to 10 or more.
>
>In C you need 10 lines of code just to turn around.
>
>This is my ML regular expression evaluator.  If you can do this in C in 40 lines
>I'll eat my shorts.

See that's what i mean the stubbornness from Swierstra too. 1 thing can be done
in a few lines because there is files defining this behaviour.

However if you write an entire program for example to convert sentences to
sound, then you will have a major problem.

Software Complexity kills these languages, all of them.

These languages are only to demonstrate something trivial in a few pages.

Anything more complicated than that, don't do it in these languages.

Of course my parser was 3 times bigger in code than that of this guy.

Note that i wrote an entire checkers program in Gofer.

That's more gofer code than Professor Swierstra has written in his life in
Gofer.

>structure Regex :> REGEX =
>struct
>  datatype regExp =
>    Char of char
>  | Concat of regExp * regExp
>  | Epsilon
>  | Union of regExp * regExp
>  | Empty
>  | Star of regExp
>  | Underscore
>  | And of regExp * regExp
>  | Top
>  | Not of regExp
>
>  fun acc (Char(a)) (nil) k = false
>     |acc (Char(a)) (b::s) k = if a = b then k s else false
>     |acc (Epsilon) s k = k s
>     |acc (Empty) s k = false
>     |acc (Union(r1,r2)) s k = acc r1 s k orelse acc r2 s k
>     |acc (Concat(r1,r2)) s k = acc r1 s (fn s' => acc r2 s' k)
>     |acc (r as Star(r1)) s k = k s orelse acc r1 s (fn s' => if s = s' then
>false else acc r s' k)
>     |acc (Underscore) (nil) k = false
>     |acc (Underscore) (b::s) k = k s
>     |acc (And(r1,r2)) s k = acc r1 s k andalso acc r2 s k
>     |acc (Top) s k = acc (Star(Underscore)) s k
>     |acc (Not(r)) s k = if (acc r s (fn s' => if (k s) then false else true)
>then false else true
>
>  fun accept r s = acc r (String.explode s) (fn nil => true | x => false)
>end
>
>anthony



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.