Domanda

Attualmente sto imparando il lambda calcolo e chiedevo sui seguenti due diversi tipi di scrittura un termine lambda.

  1. $ \ lambda xy.xy $
  2. $ \ lambda x. \ Lambda y.xy $

C'è qualche differenza di significato o il modo in cui si applica la riduzione di beta, o sono questi solo due modi per esprimere la stessa cosa?

In particolare questa definizione della creazione coppia di fatto mi chiedo:

coppia = $ \ lambda xy. \ Lambda p.pxy $

È stato utile?

Soluzione

Questi sono solo differenze di notazioni. $ ?xyz.t $ è l'abbreviazione di $ ?x.?y.?z.t $. Niente magia qui.

In effetti, $ \ mbox {} = coppia ?xyp.pxy $, ma si tende a sottolineare che $ \ mbox {} coppia \, t \, u $ è una funzione di $ ?p.ptu $ cambiando il modo in cui si scrive il definizione. Ma in realtà è lo stesso.

Altri suggerimenti

Il primo è l'abbreviazione per il secondo. Si tratta di una convenzione sintattica comune per le espressioni accorciarsi.

D'altra parte, se si dispone di tuple nella lingua, poi c'è una differenza tra

  1. $ \ lambda x. \ Lambda y.xy $ e
  2. $ \ lambda (x, y) $ .xy.

Nel primo caso posso fornire un'unica argomento della funzione, e passare la funzione risultante intorno ad altre funzioni. In quest'ultimo caso, entrambi gli argomenti devono essere alimentati contemporaneamente. V'è, naturalmente, una funzione che può essere applicato per convertire 1 in 2 e viceversa. Questo processo è noto come (dis) accattivarsi .

La definizione di $ \ text {} $ coppia si parla è una codifica della nozione di coppie nel $ \ lambda, $ -calcolo piuttosto che le coppie come un tipo di dati primitivi (come ho accennato sopra).

Trasformare una funzione che accetta più argomenti a una catena di funzioni con singoli argomenti è chiamato currying . Le due funzioni sono essenzialmente le stesse.

articolo di Wikipedia su accattivarsi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top