2009-07-30 11 views
10

Wofür wird das Zitat ' verwendet? Ich habe über Curry-Funktionen gelesen und lese zwei Möglichkeiten, die Add-Funktion zu definieren - Curry und Uncurried. Die Curry-Version ...Die Bedeutung von 'in Haskell Funktionsname?

myadd' :: Int -> Int -> Int 
myadd' x y = x + y 

... aber es funktioniert genauso gut ohne das Zitat. Also, was ist der Sinn der '?

+1

Stört es Sie umbenannt zu "Die Bedeutung von 'in Haskell Funktionsname?" – EFraim

+1

mögliche Duplikate von [Apostroph in Bezeichnern in Haskell] (http://stackoverflow.com/questions/5673916/apostrophe-in-identifiers-in-haskell) –

Antwort

21

Das Zitat bedeutet nichts zu Haskell. Es ist nur ein Teil des Namens dieser Funktion.

Menschen neigen dazu, dies für "interne" Funktionen zu verwenden. Wenn Sie eine Funktion haben, die eine Liste mit einem Akkumulatorargument summiert, benötigt Ihre Summenfunktion zwei Argumente. Das ist hässlich, also machen Sie eine Funktion von zwei Argumenten und eine sum Funktion von einem arg wie sum list = sum' 0 list.

bearbeiten, vielleicht sollte ich zeigen nur den Code:

sum' s [] = s 
sum' s (x:xs) = sum' (s + x) xs 

sum xs = sum' 0 xs 

Sie tun dies, so dass sum' Schwanz-rekursiv ist, und so, dass die „öffentliche API“ ist schön suchen.

+0

Oh ich verstehe. Danke !!! – user147056

+1

'sum'' könnte auch in' sum's 'where' Klausel stehen. – mk12

+0

Achten Sie darauf, versehentlich die Hauptfunktion in Ihrer rekursiven Funktion aufzurufen, d. H. 'Sum 's (x: xs) = sum (s + x) xs'. Das Typsystem würde sich hier beschweren, aber wenn die Funktionen den gleichen Typ haben, ist es schwer zu finden. – mk12

9

In diesem Fall gibt es keinen besonderen Hinweis auf das Zeichen '; es ist nur ein Teil der Kennung. Mit anderen Worten, myadd und myadd' sind unterschiedliche, nicht verwandte Funktionen.

Herkömmlicherweise wird die ' jedoch verwendet, um eine logische Bewertungsbeziehung zu bezeichnen. Die hypothetische Funktion myadd und myadd' wäre also so verwandt, dass myadd' von myadd abgeleitet werden könnte. Dies ist eine Konvention, die von der formalen Logik und Beweisen in der akademischen Welt (wo Haskell seine Wurzeln hat) abgeleitet ist. Ich sollte unterstreichen, dass dies nur eine Konvention ist, Haskell erzwingt es nicht.

6

Zitat 'ist nur ein weiteres Zeichen in Haskell Namen erlaubt. Es wird oft verwendet, um Varianten von Funktionen zu definieren. In diesem Fall wird quote 'prime' ausgesprochen. Insbesondere die Haskell-Bibliotheken verwenden Angebotsvarianten, um zu zeigen, dass die Variante streng ist. Zum Beispiel: foldl ist faul, foldl' ist streng.

In diesem Fall sieht es so aus, als ob das Zitat nur verwendet wird, um die Curry- und Uncurried-Varianten zu trennen.

16

Es wird oft "prime" ausgesprochen, also wäre das "myadd prime". Es wird normalerweise verwendet, um einen nächsten Schritt in der Berechnung oder eine Alternative zu notieren.

So kann man sagen,

add = blah 
add' = different blah 

Oder

f x = 
    let x' = subcomputation x 
    in blah. 

Es nur eine Gewohnheit, wie als Index für Schleife in einem int i unter Verwendung für Java, C usw.

Edit: Diese Antwort ist hoffentlich hilfreicher, jetzt, wo ich alle Wörter und Code-Formatierung hinzugefügt habe. :) Ich vergesse immer wieder, dass dies kein WYSIWYG-System ist!

1

Wie von anderen gesagt, hat die ' keine Bedeutung für Haskell selbst.Es ist nur ein Zeichen, wie ein Buchstabe oder eine Zahl.

Die ' wird verwendet, um alternative Versionen einer Funktion (im Fall von foldl und foldl') oder Hilfsfunktionen zu bezeichnen. Manchmal sehen Sie sogar mehrere ' für einen Funktionsnamen. Das Hinzufügen eines zum Ende eines Funktionsnamens ist nur viel prägnanter als das Schreiben someFunctionHelper und someFunctionStrict.

Der Ursprung dieser Notation ist in Mathematik und Physik, wo, wenn Sie eine Funktion haben f(x), wird sein Derivat oft als f'(x) bezeichnet.