🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.funkcyjne
3 messages
3 total messages Started by Marcin Gajda Sun, 22 Jun 2003 12:50
[Haskell] $
#378
Author: Marcin Gajda
Date: Sun, 22 Jun 2003 12:50
30 lines
2157 bytes
Witam,

z powodu moich problemów z gv na PLD nie mogę sobie poczytać manuali,
więc pytam się tutaj:

przeglądając ostatnio comp.lang.functional ujrzałem funckję Tomka
Zielonki zawierającą operator $!. Z kontkestu oraz z jednego z
późniejszych maili (przede wszystkim ;)) zorientowałem się, że taki
operator wymusza na kompilatorze wyliczanie czegoś tam od razu, a nie
czekanie na moment, gdy to jest potrzebne (np. opisany w tym wątku
problem (((0+1)+1)+..). To więc kojarzę. Zauważyłem jednak, że w paru
przykładowych programach pojawił się operator $ używany też przed
argumentami wołanych funkcji.

Czy ktoś z Grupowiczów mógłby mi wyjaśnić jego znaczenie? I, czy jest to
coś standardowego w Haskellu, czy rozszerzenie któregoś z kompilatorów
(a może wszystkich?)?

I tak przy okazji - jeszcze jedna drobna rzecz, mianowicie znaczek @ w
definicjach równości, przed =. Np. zapis f l@(h:t) oznacza, że l, to
jest to samo, co (h:t), tylko na dwa sposoby zapisane i potem można
odwoływać się do tego, co bardziej pasuje? Mylę się? Gentle
introduction... jakoś tak po macoszemu potraktowało wprowadzenie tego
znaczka (operatora?). Chyba, że coś przeoczyłem.

Dzięki za wszelkie uwagi.
-- 
Marcin Gajda ________________________
Linux registered user #300108________
Dieu me pardonerra - c'est son metier
Re: [Haskell] $
#379
Author: Marcin 'Qrczak' Kowalczyk
Date: Sun, 22 Jun 2003 13:09
35 lines
1925 bytes
Marcin Gajda wrote:

> Zauważyłem jednak, że w paru przykładowych programach pojawił się operator
> $ używany też przed argumentami wołanych funkcji.

f $ x = f x

Priorytet $ pozwala często uniknąć nawiasów, np.

foo x = bar $ case g x of
   ... -> ...
   ... -> ...

Bez $ trzeba by otworzyć nawias i zamknąć na końcu.

> I, czy jest to coś standardowego w Haskellu,

Tak.

> I tak przy okazji - jeszcze jedna drobna rzecz, mianowicie znaczek @ w
> definicjach równości, przed =. Np. zapis f l@(h:t) oznacza, że l, to
> jest to samo, co (h:t), tylko na dwa sposoby zapisane i potem można
> odwoływać się do tego, co bardziej pasuje?

Tak. To jest to samo co f (h:t) (tzn. może być też obok alternatywna
definicja dla []), tyle że jeśli chcemy odwołać się do tego argumentu
w całości, to nie trzeba z powrotem składać go z h:t, tylko mamy go pod
jednym identyfikatorem l.

To samo w OCamlu pisze się (h::t as l), a w SML-u (l as h::t).

-- 
   __("<         Marcin Kowalczyk
   \__/       qrczak@knm.org.pl
    ^^     http://qrnik.knm.org.pl/~qrczak/
Re: [Haskell] $
#380
Author: Marcin Gajda
Date: Sun, 22 Jun 2003 13:25
8 lines
1015 bytes
> f $ x = f x [..]

Dzięki!

-- 
Marcin Gajda ________________________
Linux registered user #300108 _______
Dieu me pardonerra - c'est son metier
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads