POV-Ray : Newsgroups : povray.off-topic : Really epic Server Time
11 Oct 2024 05:19:49 EDT (-0400)
  Really epic (Message 31 to 40 of 55)  
<<< Previous 10 Messages Goto Latest 10 Messages Next 10 Messages >>>
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

From: Orchid XP v7
Subject: Re: Really epic
Date: 14 Feb 2008 15:31:22
Message: <47b4a51a$1@news.povray.org>
nemesis wrote:
> 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...

Ah, OK.

IIRC there's also a bunch of functions for modifying lists in-place that 
Haskell also doesn't have...

-- 
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:33:08
Message: <47b4a583@news.povray.org>
nemesis <nam### [at] gmailcom> wrote:
> 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...

  Maybe I confused "let" with "set".

-- 
                                                          - Warp


Post a reply to this message

From: nemesis
Subject: Re: Really epic
Date: 14 Feb 2008 15:35:00
Message: <web.47b4a5b79e92b6c266f20de80@news.povray.org>
Jim Henderson <nos### [at] nospamcom> wrote:
> 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? ;-)

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

I don't lose time with that kind of stuff...


Post a reply to this message

From: Orchid XP v7
Subject: Re: Really epic
Date: 14 Feb 2008 15:35:18
Message: <47b4a606$1@news.povray.org>
Warp wrote:

>   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

Looks like YAFFI [Yet Another Factorial Function] to me. ;-)

[And yes, for anybody else reading it, it works just fine...]

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


Post a reply to this message

From: nemesis
Subject: Re: Really epic
Date: 14 Feb 2008 15:40:00
Message: <web.47b4a67c9e92b6c266f20de80@news.povray.org>
Nicolas Alvarez <nic### [at] gmailisthebestcom> wrote:
> 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."

a functional programmer with no prior exposure to the imperative paradigm?!
Haskell is creating mindless monsters! :D


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.