> On 10 Feb 2024, at 09:27, Al <frm...@mailgw.com> wrote:
> 
> On 2024-02-10 10:13, Pietro Cerutti wrote:
> 
>> I don't get your question: those two things are the same thing :)
>> 
>> Referential transparency means you can substitute an expression with its 
>> expansion down to a value. If anything happening in between causes 
>> (observable *) changes, you can't do it anymore.
>> 
>> (*) modifying the program counter is not an observable change, for example.
>> 
> Those two things are the same thing in Haskell and languages that have a 
> mathematical model of the program, yes. Scheme is... not that, much of the 
> time. Chicken is implemented on top of C, so it's even less clear.

Both Haskell and CHICKEN ultimately compile to obiect code. That is not 
important: the important thing is the abstract machine you're programming 
against. This is why I specified "observable" in my previous reply.

> But let's not get theoretical, yes, my question is if csc can (does?) 
> "memoize" the results of "pure" function.
> 
> 
> In any case, the definitions I quoted above
> 
> * https://wiki.call-cc.org/man/5/Declarations#pure
> 
> * https://wiki.call-cc.org/man/5/Types#purity
> 
> are not the same thing, so either the one or the other should stand. Though 
> I'm not sure what "local variables or data contained in local variables" 
> actually means. I think it means you can't "set!" globals.

Yeah their wording is different but the meaning is the same, i.e., a --> 
function will be marked as pure (for the implementation, see the last value 
returned by validate-type in scrutinizer.scm).

-- 
Pietro Cerutti
I've pledged to give 10% of income to effective charities and invite you to 
join me.
https://givingwhatwecan.org

Sent from a small device - please excuse brevity and typos.

Reply via email to