POV-Ray : Newsgroups : povray.off-topic : Really epic Server Time
11 Oct 2024 05:21:02 EDT (-0400)
  Really epic (Message 26 to 35 of 55)  
<<< Previous 10 Messages Goto Latest 10 Messages Next 10 Messages >>>
From: Jim Henderson
Subject: Re: Really epic
Date: 14 Feb 2008 15:07:41
Message: <47b49f8d$1@news.povray.org>
On Thu, 14 Feb 2008 20:06:39 +0000, Orchid XP v7 wrote:

>>> Well *obviously* I actually meant to type 35...
>> 
>> What, even with separate keys on the keyboard? <scnr> <g>
> 
> Care to count how many characters I typed *correctly*? ;-)

Nah, I just couldn't resist the temptation to call you on it. ;-)

Jim


Post a reply to this message

From: Orchid XP v7
Subject: Re: Really epic
Date: 14 Feb 2008 15:08:34
Message: <47b49fc2$1@news.povray.org>
>> As the name suggests, it's a language specifically designed to be
>> incomprehensible. [Unlike, say, the SKI calculus, which *is*
>> incomprehensible, but not by design...]
> 
> Well, yes, but at the same time, there must be a definitive reference on 
> it.  Or is it the "ipsum lorem" text that's considered definitive? ;-)

Oh yes, of course...

http://www.muppetlabs.com/~breadbox/bf/

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

From: Nicolas Alvarez
Subject: Re: Really epic
Date: 14 Feb 2008 15:15:53
Message: <47b4a179@news.povray.org>

> So what's the difference? Well, let's try this:
> 
>   function solve2(a, b, c)
>   {
>     var det  = Math.sqrt(det2);
>     var det2 = b*b - 4*a*c;
>     var a2   = 2*a;
>     return Array((0-b-dat)/a2, (0-b+det)/a2));
>   }
> 
> Hmm, that's not going to work properly... However, the corresponding 
> Haskell works exactly as before:
> 
>   solve2 a b c =
>     let det  = sqrt det2
>         det2 = b*b - 4*a*c
>         a2   = 2*a
>     in  [(0-b-det)/a2, (0-b+det)/a2]
> 
> So in Haskell, the ordering doesn't matter.

http://rinkworks.com/stupid/cs_programming.shtml

"An introductory programming student once asked me to look at his 
program and figure out why it was always churning out zeroes as the 
result of a simple computation. I looked at the program, and it was 
pretty obvious:

begin
     readln("Number of Apples", apples);
     readln("Number of Carrots", carrots);
     readln("Price for 1 Apple", a_price);
     readln("Price for 1 Carrot", c_price);
     writeln("Total for Apples", a_total);
     writeln("Total for Carrots", c_total);
     writeln("Total", total);
     total := a_total + c_total;
     a_total := apples * a_price;
     c_total := carrots + c_price;
end;

  * Me: "Well, your program can't print correct results before they're 
computed."
  * Him: "Huh? It's logical what the right solution is, and the computer 
should reorder the instructions the right way."

---

So he was right after all...


Post a reply to this message

From: Warp
Subject: Re: Really epic
Date: 14 Feb 2008 15:20:02
Message: <47b4a272@news.povray.org>
Orchid XP v7 <voi### [at] devnull> wrote:
> >> Brainf*ck.
> > 
> > Now there's a language I'm unfamiliar with - who wrote the book on that 
> > one? ;-)

> As the name suggests, it's a language specifically designed to be 
> incomprehensible.

  Personally I like the idea behind Befunge more. The only problem I have
with Befunge is that it's way too difficult to do anything practical with
it (because it uses a stack which you can't index, and it lacks support
for variables).

-- 
                                                          - Warp


Post a reply to this message

From: nemesis
Subject: Re: Really epic
Date: 14 Feb 2008 15:25:01
Message: <web.47b4a3259e92b6c266f20de80@news.povray.org>
Warp <war### [at] tagpovrayorg> wrote:
>   I asked because 'let' sounded to me like an assignment, which is not
> functional.

it introduces a new lexically scoped binding for a constant "function".  It's
not like you can't give values names in functional languages.  Come on, giving
names is the simplest means of abstraction there is!

Assignment is only bad when it happens all the time, at all levels, by multiple
points in code mutating a single location, which can lead to undesired
side-effects as the source of many bugs and sync problems.  As a rule of thumb,
in functional languages new locations are created rather than altering the
contents of previous ones, unless when it's not wise on the performance side.


Post a reply to this message

From: Orchid XP v7
Subject: Re: Really epic
Date: 14 Feb 2008 15:26:47
Message: <47b4a407$1@news.povray.org>
>> So in Haskell, the ordering doesn't matter.
> 
> http://rinkworks.com/stupid/cs_programming.shtml
> 
> "An introductory programming student once asked me to look at his 
> program and figure out why it was always churning out zeroes as the 
> result of a simple computation. I looked at the program, and it was 
> pretty obvious:
> 
> begin
>     readln("Number of Apples", apples);
>     readln("Number of Carrots", carrots);
>     readln("Price for 1 Apple", a_price);
>     readln("Price for 1 Carrot", c_price);
>     writeln("Total for Apples", a_total);
>     writeln("Total for Carrots", c_total);
>     writeln("Total", total);
>     total := a_total + c_total;
>     a_total := apples * a_price;
>     c_total := carrots + c_price;
> end;
> 
>  * Me: "Well, your program can't print correct results before they're 
> computed."
>  * Him: "Huh? It's logical what the right solution is, and the computer 
> should reorder the instructions the right way."
> 
> ---
> 
> So he was right after all...

The trouble is, as soon as you start assigning more than one value to 
something, it suddenly matters *when* you read it's value. And that 
means if you start reordering things, everything goes horribly wrong.

Haskell does not permit you to assign more than one value to any given 
variable. Thus, Haskell is able to chase down dependencies (even 
circular ones) and Do The Right Thing(tm). So it really is a math-style 
definition that always holds rather than an imperative-style assignment 
at a specific point in time.

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

From: Warp
Subject: Re: Really epic
Date: 14 Feb 2008 15:29:41
Message: <47b4a4b5@news.povray.org>
Orchid XP v7 <voi### [at] devnull> wrote:
>    solve2 a b c =
>      let det  = sqrt det2
>          det2 = b*b - 4*a*c
>          a2   = 2*a
>      in  [(0-b-det)/a2, (0-b+det)/a2]

  I wonder what something along the lines of this would do:

foo a =
  let res = if a<2 then 1 else a*foo(a-1)
  in res

-- 
                                                          - Warp


Post a reply to this message

From: nemesis
Subject: Re: Really epic
Date: 14 Feb 2008 15:30:00
Message: <web.47b4a3a79e92b6c266f20de80@news.povray.org>
Orchid XP v7 <voi### [at] devnull> wrote:
> >   I asked because 'let' sounded to me like an assignment, which is not
> > functional.
>
> I'm pretty sure you're right about Lisp. But in Haskell, it's not an
> assignment - although it does look like one.

In Scheme and Lisp, let introduces new lexical scoped bindings for values, just
like in Haskell.  Except someone can use set! on them and break all referential
transparency apart...


Post a reply to this message

From: nemesis
Subject: Re: Really epic
Date: 14 Feb 2008 15:30:00
Message: <web.47b4a49d9e92b6c266f20de80@news.povray.org>
Orchid XP v7 <voi### [at] devnull> wrote:
> And how do you suggest I do that, given that there's no obvious "entry
> point"?

run one of them, perhaps "un", on some RSA key?


Post a reply to this message

From: Orchid XP v7
Subject: Re: Really epic
Date: 14 Feb 2008 15:30:38
Message: <47b4a4ee$1@news.povray.org>
Nicolas Alvarez wrote:

> http://rinkworks.com/stupid/cs_programming.shtml

Woah. Some of these are pretty "special" BTW... :-D

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

<<< Previous 10 Messages Goto Latest 10 Messages Next 10 Messages >>>

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.