- Contemporary messages sorted: [ by date ] [ by thread ] [ by subject ] [ by author ] [ by messages with attachments ]

From: Sebastian Fischer <sebf_at_informatik.uni-kiel.de>

Date: Wed, 25 Nov 2009 18:38:53 +0100

Hi Wolfgang,

*> Sorry for nitpicking.
*

I appreciate it.

*> The transformation from the partial application ((+) (1?2)) to (\x y
*

*> -> x + y) (1?2) happens to be valid only by virtue of the fact that
*

*> (+) is a binary function.
*

Indeed. The transformation that I used is the following:

If `f e1 ... ek` is a partial application of an operation `f` of arity

`n`, then it can be transformed into the following applications of

lambda abstractions:

(\x1 -> ... \xn -> f x1 ... xn) e1 ... ek

I believe that this is a valid transformation but would definitely be

interested in a counter example.

*> If you replace (+) by the following, contrived function
*

*> addOrSub x = (x +) ? (x -)
*

*> the introduction of the lambda abstraction would be an invalid eta-
*

*> expansion, i.e., (addOrSub (1?2)) and (\x y -> x `addOrSub` y) (1?2)
*

*> are no longer equivalent.
*

I agree. As the arity of `addOrSub` is 1, the above transformation is

not applicable because `addOrSub (1?2)` is no partial application.

*> [...] just another case that shows that beta-reduction is also not
*

*> valid in general in a functional-logic language with compile-time
*

*> choice.
*

Yikes! I understand that *eta*-reduction is invalid in a functional-

logic language with *call*-time choice. As said before, I was

surprised that *beta*-reduction (i.e. application of lambdas) is also

invalid. But I never heard the term *compile*-time choice.

Would you mind elaborating? Sorry if I'm asking to explain a joke..

Cheers,

Sebastian

Date: Wed, 25 Nov 2009 18:38:53 +0100

Hi Wolfgang,

I appreciate it.

Indeed. The transformation that I used is the following:

If `f e1 ... ek` is a partial application of an operation `f` of arity

`n`, then it can be transformed into the following applications of

lambda abstractions:

(\x1 -> ... \xn -> f x1 ... xn) e1 ... ek

I believe that this is a valid transformation but would definitely be

interested in a counter example.

I agree. As the arity of `addOrSub` is 1, the above transformation is

not applicable because `addOrSub (1?2)` is no partial application.

Yikes! I understand that *eta*-reduction is invalid in a functional-

logic language with *call*-time choice. As said before, I was

surprised that *beta*-reduction (i.e. application of lambdas) is also

invalid. But I never heard the term *compile*-time choice.

Would you mind elaborating? Sorry if I'm asking to explain a joke..

Cheers,

Sebastian

-- Underestimating the novelty of the future is a time-honored tradition. (D.G.) _______________________________________________ curry mailing list curry_at_lists.RWTH-Aachen.DE http://MailMan.RWTH-Aachen.DE/mailman/listinfo/curryReceived on Wed Nov 25 2009 - 18:49:45 CET

*
This archive was generated by hypermail 2.3.0
: Wed Sep 18 2019 - 07:15:07 CEST
*