Czy istnieje różnica między a ?

11

Obecnie uczę się rachunku lambda i zastanawiałem się nad następującymi dwoma różnymi rodzajami pisania terminu lambda.

  1. λxy.xy
  2. λx.λy.xy

Czy jest jakaś różnica w znaczeniu lub sposobie zastosowania redukcji wersji beta, czy to tylko dwa sposoby wyrażenia tego samego?

Szczególnie ta definicja tworzenia par wzbudziła we mnie zastanowienie:

para =λxy.λp.pxy

magnetyczny
źródło

Odpowiedzi:

15

To tylko różnice w notacjach. λxyz.t jest skrótem λx.λy.λz.t . Brak magii tutaj.

Rzeczywiście, ale zwykle podkreślasz, że jest funkcją , zmieniając sposób pisania definicji. Ale tak naprawdę jest tak samo.pair=λxyp.pxypairtuλp.ptu

jmad
źródło
17

Pierwszy to skrót od drugiego. Jest to powszechna konwencja składniowa do skracania wyrażeń.

Z drugiej strony, jeśli masz krotki w języku, istnieje różnica między nimi

  1. λx.λy.xy i
  2. λ(x,y).xy .

W pierwszym przypadku mogę podać pojedynczy argument funkcji i przekazać wynikową funkcję innym funkcjom. W tym drugim przypadku oba argumenty należy podać jednocześnie. Istnieje oczywiście funkcja, którą można zastosować do konwersji 1 na 2 i odwrotnie. Ten proces jest znany jako (nie) curry .

Definicja , o której wspominasz, to kodowanie pojęcia par w -calculus, a nie par jako prymitywnego typu danych (jak wskazałem powyżej).pairλ

Dave Clarke
źródło
2

Przekształcanie funkcji, która przenosi wiele argumentów do łańcucha funkcji z pojedynczymi argumentami, nazywa się curry . Dwie funkcje są zasadniczo takie same.

Artykuł w Wikipedii o curry

Ghassen Hamrouni
źródło
8
Nie ma czegoś takiego jak funkcja przyjmująca wiele argumentów w rachunku lambda. jest dokładnie takie samo jak , nie tylko w zasadzie to samo. λ x . λ y . x yλxy.xyλx.λy.xy
sepp2k