Aktionen innerhalb Regel mit "let"

montana
Erstie
Erstie
Beiträge: 22
Registriert: 8. Nov 2016 18:58

Aktionen innerhalb Regel mit "let"

Beitrag von montana » 17. Feb 2017 21:22

Hi,
ich bin etwas verwirrt wegen dem let.
Wenn man eine Zuweisung einer neuen Variable mit let deklariert, wird diese Zeile dann immer als erstes in der Regel ausgeführt?
Normalerweise wird ja die Ausführung der Aktionen innerhalb einer Regel als gleichzeitig betrachtet.
Zum Beispiel würde dann diese Regel (Übung 4 Nummer 1 Lösungen) keinen Sinn machen, wenn die "let"s nicht als erstes betrachtet werden.

Code: Alles auswählen

rule calc;
   let color = inputValue.first; inputValue.deq;
   let gray = toGray(color);

   outputValue.enq(gray);
endrule
LG

Fabian Czappa
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 10. Mai 2015 11:45

Re: Aktionen innerhalb Regel mit "let"

Beitrag von Fabian Czappa » 17. Feb 2017 21:27

Hay,

Zwischenwerte wie dieser resultieren nicht in richtiger Hardware, sondern sind nur zum Komfort beim Programmieren afaik.
Die Regel verbindet sozusagen die FIFOs direkt aufeinander, mit noch Modifikationen zum Überprüfen, ob ein Element und ein Platz vorhanden sind.

Da sind keine Register, mit color und gray drin.
Viele Grüße
Fabian

JHofmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 23. Apr 2015 10:43

Re: Aktionen innerhalb Regel mit "let"

Beitrag von JHofmann » 17. Feb 2017 21:30

Hallo,

in dem Fall werden die 'let' von Oben nach Unten abgearbeitet.

Man kann eine lokale Variable auch wiederverwenden:

Code: Alles auswählen

rule calc;
	let color = inputValue.first(); inputValue.deq();
	let gray = toGray(color);
	outputValue.enq(gray); gray == inputValue.first()
	gray = 42;
	outputValue2.enq(gray); // gray == 42;
endrule
Wie Fabian schon schrieb wird dafür für gewöhnlich keine Hardware benötigt sondern dient der einfacheren "Verdrahtung".

Viele Grüße,

montana
Erstie
Erstie
Beiträge: 22
Registriert: 8. Nov 2016 18:58

Re: Aktionen innerhalb Regel mit "let"

Beitrag von montana » 18. Feb 2017 14:50

Danke.

Habe noch eine Frage zu "let":

Wann wird das Zeichen "=" und wann "<-" im Bezug zu let benutzt?

LG

Fabian Czappa
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 10. Mai 2015 11:45

Re: Aktionen innerhalb Regel mit "let"

Beitrag von Fabian Czappa » 18. Feb 2017 14:56

Hay,

'=' wird immer dann benutzt, wenn Zuweisungen ohne Nebeneffekt passieren. So z.B. auch bei "interface Put request = toPut(in)".
'<-' wird dagegen bei Zuweisungen mit Nebeneffekt verwendet, z.B. bei "Reg#(..) r <- mkReg(...)" (Hier wird ein neues Register im Modul erstellt, das hat auf jeden Fall einen Nebeneffekt) oder eben bei "let d <- ...", wenn die rechte Seite einen Nebeneffekt (ActionValue) hat.

Viele Grüße
Fabian

typ
Windoof-User
Windoof-User
Beiträge: 32
Registriert: 5. Nov 2016 19:06

Re: Aktionen innerhalb Regel mit "let"

Beitrag von typ » 18. Feb 2017 14:58

Soweit ich verstanden habe nutzt du =, wenn du einen Wert/eine Wertmethode zuweist.
Wenn du eine ActionValue#(Type) zuweist, nutzt du <-

Antworten

Zurück zu „Archiv“