Suche…


Bemerkungen

"Erlang ist eine Programmiersprache, die ursprünglich im Ericsson Computer Science Laboratory entwickelt wurde. OTP (Open Telecom Platform) ist eine Sammlung von Middleware und Bibliotheken in Erlang. Erlang / OTP wurde in einer Reihe von Ericsson-Produkten für den Aufbau robuster fehlertoleranter Produkte getestet verteilte Anwendungen, z. B. AXD301 (ATM-Switch). Erlang / OTP wird derzeit von der Erlang / OTP-Einheit bei Ericsson verwaltet. "( erlang.org )

Fang hier an

Installationsanweisungen finden Sie unter Installationsthema .

  1. Offizielle Erlang-Site: https://www.erlang.org
  2. Beliebte Paketverwaltung für Erlang und Elixir: http://hex.pm
  3. Erlang Patterns: http://www.erlangpatterns.org/

Versionen

Ausführung Versionshinweise Veröffentlichungsdatum
19.2 http://erlang.org/download/otp_src_19.2.readme 2016-12-14
19.1 http://erlang.org/download/otp_src_19.1.readme 2016-09-21
19,0 http://erlang.org/download/otp_src_19.0.readme 2016-06-21
18.3 http://erlang.org/download/otp_src_18.3.readme 2016-03-15
18.2.1 http://erlang.org/download/otp_src_18.2.1.readme 2015-12-18
18.2 http://erlang.org/download/otp_src_18.2.readme 2015-12-16
18.1 http://erlang.org/download/otp_src_18.1.readme 2015-09-22
18,0 http://erlang.org/download/otp_src_18.0.readme 2015-06-24
17.5 http://erlang.org/download/otp_src_17.5.readme 01.04.2015
17.4 http://erlang.org/download/otp_src_17.4.readme 2014-12-10
17.3 http://erlang.org/download/otp_src_17.3.readme 2014-09-17
17.1 http://erlang.org/download/otp_src_17.1.readme 2014-06-24
17,0 http://erlang.org/download/otp_src_17.0.readme 2014-04-07
R16B03-1 http://erlang.org/download/otp_src_R16B03-1.readme 2014-01-23
R16B03 http://erlang.org/download/otp_src_R16B03.readme 2013-12-09
R16B02 http://erlang.org/download/otp_src_R16B02.readme 2013-09-17
R16B01 http://erlang.org/download/otp_src_R16B01.readme 2013-06-18
R16B http://erlang.org/download/otp_src_R16B.readme 2013-02-25

Hallo Welt

Es gibt zwei Dinge, die Sie beim Schreiben einer Anwendung "Hallo Welt" in Erlang wissen müssen:

  1. Der Quellcode wird in der Programmiersprache erlang mit einem Texteditor Ihrer Wahl geschrieben
  2. Die Anwendung wird dann in der virtuellen Maschine erlang ausgeführt. In diesem Beispiel interagieren wir mit der erlang-VM über die erlang-Shell.

Zuerst den Quellcode der Anwendung:

Erstellen Sie eine neue Datei hello.erl , die Folgendes enthält:

-module(hello).
-export([hello_world/0]).

hello_world() ->
  io:format("Hello, World!~n", []).

Schauen wir uns kurz an, was das bedeutet:

  • -module(hello). Alle erlang-Funktionen sind in einem Modul vorhanden . Module werden dann zum Erstellen von Anwendungen verwendet, bei denen es sich um eine Sammlung von Modulen handelt. Diese erste Zeile dient der Identifizierung dieses Moduls, nämlich Hallo . Module können mit Java- Paketen verglichen werden
  • -export([hello_world/0]). Gibt dem Compiler an, welche Funktionen "öffentlich" sind (im Vergleich zu OO-Sprachen) und wie wichtig die betreffende Funktion ist. Die Zahl ist die Anzahl der Argumente, die die Funktion akzeptiert. In erlang wird eine Funktion mit 1 Argument als eine andere Funktion betrachtet als eine mit 2 Argumenten, obwohl der Name möglicherweise genau derselbe ist. hello_world/0 ist also eine völlig andere Funktion als zum Beispiel hello_world/1 .
  • hello_world() Dies ist der Name der Funktion. Das -> zeigt den Übergang zur Implementierung (Body) der Funktion an. Dies kann gelesen werden als "hello_world () ist definiert als ...". Beachten Sie, dass hello_world() (keine Argumente) in der VM mit hello_world/0 und hello_world(Some_Arg) als hello_world/1 .
  • io:format("Hello, World!~n", []) Vom Modul io wird die Funktion format/2 aufgerufen, die Funktion für die Standardausgabe. ~n ist ein Formatbezeichner, dh eine neue Zeile drucken. [] Ist eine Liste von zu druckenden Variablen, die durch Formatbezeichner in der Ausgabezeichenfolge angegeben werden. In diesem Fall handelt es sich um nichts.
  • Alle erlang-Anweisungen müssen mit einem . (Punkt).

In Erlang wird das Ergebnis der letzten Anweisung in einer Funktion zurückgegeben.

Lassen Sie uns jetzt unsere Anwendung ausführen:

Starten Sie die erlang-Shell aus demselben Verzeichnis wie die Datei " hello.erl ":

$ erl

Sie sollten eine Eingabeaufforderung erhalten, die ungefähr so ​​aussieht (Ihre Version kann anders sein):

Eshell V8.0  (abort with ^G)
1>

Geben Sie nun die folgenden Befehle ein:

1> c(hello).
{ok,hello}
2> hello:hello_world().
Hello, World!
ok

Gehen wir jede Zeile einzeln durch:

  • c(hello) - dieser Befehl ruft die Funktion c an einem Atom hello . Dadurch wird Erlang hello.erl , die Datei hello.erl zu finden, in ein Modul zu kompilieren (eine Datei mit dem Namen hello.beam wird im Verzeichnis generiert) und in die Umgebung zu laden.
  • {ok, hello} - dies ist das Ergebnis des Aufrufs der obigen Funktion c . Es ist ein Tupel ein Atom enthält , ok und ein Atom hello . Erlang-Funktionen geben normalerweise entweder {ok, Something} oder {error, Reason} .
  • hello:hello_world() - das ruft eine Funktion hello_world() aus dem Modul hello .
  • Hello, World! - das ist, was unsere Funktion druckt.
  • ok - das ist, was unsere Funktion zurückgegeben hat. Da Erlang eine funktionale Programmiersprache ist, gibt jede Funktion etwas zurück . In unserem Fall, obwohl wir nichts zurück haben hello_world() , war der letzte Aufruf in dieser Funktion io:format(...) und diese Funktion zurück ok , was wiederum ist es, was unsere Funktion zurückgegeben.

Module

Ein Erlang-Modul ist eine Datei mit mehreren gruppierten Funktionen. Diese Datei hat .erl Erweiterung .erl .

Ein "Hello World" -Modul mit dem Namen hello.erl ist unten gezeigt

-module(hello).
-export([hello_world/0]).

hello_world() ->
  io:format("Hello, World!~n", []).

In der Datei muss der Modulname angegeben werden. Wie zuvor in Zeile 1 gezeigt. Der .erl und der Dateiname vor der Erweiterung .erl müssen identisch sein.

Funktion

Funktion ist ein Satz von Anweisungen, die in Gruppen zusammengefasst sind. Diese gruppierten Anweisungen führen zusammen bestimmte Aufgaben aus. In erlang geben alle Funktionen beim Aufruf einen Wert zurück.

Unten sehen Sie ein Beispiel für eine Funktion, die zwei Zahlen hinzufügt

add(X, Y)-> X + Y.

Diese Funktion führt eine Add-Operation mit X- und Y-Werten aus und gibt das Ergebnis zurück. Funktion kann wie folgt verwendet werden

add(2,5).

Funktionsdeklarationen können aus mehreren Klauseln bestehen, die durch ein Semikolon getrennt sind. Die Argumente in jeder dieser Klauseln werden durch Mustervergleich ausgewertet. Die folgende Funktion gibt 'Tupel' zurück, wenn das Argument ein Tupel im Formular ist: {test, X}, wobei X einen beliebigen Wert haben kann. Es wird 'Liste' zurückgeben, wenn das Argument eine Liste der Länge 2 in der Form ["test", X] ist, und in allen anderen Fällen wird '{error, "Reason"}' zurückgegeben:

function({test, X}) -> tuple;
function(["test", X]) -> list;
function(_) -> {error, "Reason"}.

Wenn das Argument kein Tupel ist, wird die zweite Klausel ausgewertet. Wenn das Argument keine Liste ist, wird die dritte Klausel ausgewertet.

Funktionsdeklarationen können aus sogenannten "Guards" oder "Guard Sequences" bestehen. Diese Guards sind Ausdrücke, die die Bewertung einer Funktion einschränken. Eine Funktion mit Guards wird nur ausgeführt, wenn alle Guard-Ausdrücke einen wahren Wert ergeben. Mehrere Guards können durch ein Semikolon getrennt werden.

function_name(Argument) when Guard1; Guard2; ... GuardN -> (...).

Die Funktion 'Funktionsname' wird nur ausgewertet, wenn die Guardsequenz wahr ist. Die folgende Funktion gibt nur dann true zurück, wenn sich das Argument X im richtigen Bereich befindet (0..15):

in_range(X) when X>=0; X<16 -> true;
in_range(_) -> false.

Listenverständnis

Listenverständnisse sind ein syntaktisches Konstrukt, um eine Liste basierend auf vorhandenen Listen zu erstellen.
In erlang hat ein Listenverständnis die Form [Expr || Qualifier1, ..., QualifierN] .
Wobei Qualifier entweder Generatoren sind Pattern <- ListExpr oder filtern Sie wie integer(X) bewerten Sie entweder true oder false .

Das folgende Beispiel zeigt ein Listenverständnis mit einem Generator und zwei Filtern.

[X || X <- [1,2,a,3,4,b,5,6], integer(X), X > 3].

Das Ergebnis ist eine Liste, die nur ganze Zahlen über 3 enthält.

[4,5,6]

Erlang Shell starten und stoppen

Starten der Erlang-Shell

Auf einem UNIX-System starten Sie die Erlang-Shell an einer Eingabeaufforderung mit dem Befehl erl

Beispiel:

$ erl
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
1> 

Der Text, der beim Starten der Shell angezeigt wird, enthält Informationen über die von Ihnen verwendete Erlang-Version sowie weitere nützliche Informationen zum Erlang-System.

Um die Shell unter Windows zu starten, klicken Sie auf das Erlang-Symbol im Windows-Startmenü.

Stoppen der Erlang-Shell

Zum kontrollierten Beenden der Erlang-Shell geben Sie Folgendes ein:

Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
1> q().

Sie können die Erlang-Shell auch beenden, indem Sie auf UNIX-Systemen die Tastenkombination Strg + C oder unter Windows die Tastenkombination Strg + Pause drücken.

Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
1> 
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
       (v)ersion (k)ill (D)b-tables (d)istribution

Wenn Sie dann a drücken (zum Abbruch), verlassen Sie die Shell direkt.

Andere Möglichkeiten, die erlang-Shell zu verlassen, sind: init:stop() was dasselbe wie q() oder erlang:halt() .

Musterabgleich

Eine der häufigsten Operationen in erlang ist der Musterabgleich. Es wird verwendet, wenn einer Variablen ein Wert zugewiesen wird, in Funktionsdeklarationen und in Kontrollflussstrukturen wie case und receive Anweisungen. Eine Musterabgleichoperation erfordert mindestens zwei Teile: ein Muster und einen Begriff, mit dem das Muster abgeglichen wird.

Eine variable Zuweisung in erlang sieht folgendermaßen aus:

X = 2.

In den meisten Programmiersprachen ist die Semantik dieser Operation einfach: Binden Sie einen Wert ( 2 ) an einen Namen Ihrer Wahl (die Variable - in diesem Fall X ). Erlang hat einen etwas anderen Ansatz: Passen Sie das Muster auf der linken Seite ( X ) an den Ausdruck auf der rechten Seite ( 2 ) an. In diesem Fall ist der Effekt derselbe: Die Variable X ist jetzt an den Wert 2 gebunden. Mit Pattern Matching können Sie jedoch strukturiertere Zuweisungen durchführen.

{Type, Meta, Doc} = {document, {author, "Alice"}, {text, "Lorem Ipsum"}}.

Diese Abgleichoperation wird durchgeführt, indem die Struktur des rechten Termes analysiert wird und alle Variablen auf der linken Seite auf die entsprechenden Werte des Terms angewendet werden, so dass die linke Seite der rechten Seite entspricht. In diesem Beispiel ist Type an den Begriff: document , Meta to {author, "Alice"} und Doc an {text, "Lorem Ipsum"} . In diesem speziellen Beispiel wird angenommen, dass die Variablen: Type , Meta und Doc ungebunden sind , sodass jede Variable verwendet werden kann.

Musteranpassungen können auch mithilfe gebundener Variablen erstellt werden.

Identifier = error.

Die Variable Identifier wird nun auf den Wert gebunden error . Die folgende Mustervergleichsoperation funktioniert, da die Struktur übereinstimmt und der Identifier die gebundene Variable denselben Wert hat wie der entsprechende Teil auf der rechten Seite.

{Identifier, Reason} = {error, "Database connection timed out."}.

Eine Musterabgleichoperation schlägt fehl, wenn zwischen dem Ausdruck auf der rechten Seite und dem Muster auf der linken Seite ein Konflikt besteht. Das folgende Spiel wird fehlschlagen, weil Identifier auf den Wert gebunden ist , error , wich keinen angemessenen Ausdruck auf der rechten Seite Begriff.

{Identifier, Reason} = {fail, "Database connection timed out."}.
> ** exception error: no match of right hand side value {fail,"Database ..."}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow