1. Foren
  2. Kommentare
  3. Software-Entwicklung
  4. Alle Kommentare zum Artikel
  5. › Crema: Eine…

Ist Crema funktional?

  1. Thema

Neues Thema Ansicht wechseln


  1. Ist Crema funktional?

    Autor: WolfgangS 05.08.15 - 09:29

    Ansonsten dürfte Walther nicht gehen.

  2. Re: Ist Crema funktional?

    Autor: Schattenwerk 05.08.15 - 09:32

    guckst du: https://github.com/ainfosec/crema/wiki

  3. Ja.

    Autor: Missingno. 05.08.15 - 09:47

    Und die Aussage

    > Konkret bedeutet das, dass in der Programmiersprache Crema endlos laufende Schleifen oder unbeschränkte Rekursionen nicht möglich sind.

    ist damit nicht korrekt.

    def void foobar(){
    foobar();
    }

    Es wird ja kaum jemand anzweifeln wollen, dass das eine ziemlich unbeschränkte (sinnlose) Rekursion ist.

    --
    Dare to be stupid!

  4. Re: Ja.

    Autor: andi_lala 05.08.15 - 10:06

    Ich hab mal kurz drüber geschaut, aber als funktionale Sprache würde ich Crema keines Falls bezeichnen. Man muss sich nur die Bubble Sort Implementierung diesbezüglich anschauen.
    Schleifen und Zuweisungen deuten eher auf eine imperative Sprache hin.

    Edit:
    Sie schreiben sogar selber, dass Crema prozedural ist:
    > Crema is designed in the popular procedural paradigm, following a number of C styles while adopting some newer features from more modern languages like Python and Ruby.



    1 mal bearbeitet, zuletzt am 05.08.15 10:11 durch andi_lala.

  5. Re: Ja.

    Autor: lestard 05.08.15 - 10:06

    Nur weil es eine Rekursion ist, macht es das nicht zu einer Funktion. Eine Funktion muss einen Rückgabewert liefern. Zumindest in einer funktionalen Sprache

  6. Re: Ja.

    Autor: Missingno. 05.08.15 - 10:12

    Es gibt auch

    def int bla() {
    return 0;
    }

    Und da mache ich jetzt gleich noch ein

    def int bla(a) {
    if( bla(a) )
    bla(a+1);
    else
    return 0;
    }

    draus.

    --
    Dare to be stupid!

  7. Re: Ja.

    Autor: andi_lala 05.08.15 - 10:20

    Ist das wirklich momentan möglich und lässt sich so kompilieren? Dann hätten sie ja gleich die While-Schleife drinnen lassen können! Ich kann mir aber nicht vorstellen, dass unbeschränkte Rekursionen drinnen bleiben.
    Wenn man sich die Examples anschaut findet man dort überhaupt keine Rekursionen, obwohl es sich anbieten würde.

  8. Re: Ja.

    Autor: lestard 05.08.15 - 11:31

    Das sind beides Funktionen. Aber ich bezweifle, dass die zweite Funktion in der Sprache möglich wäre.

  9. Re: Ja.

    Autor: WasntMe 05.08.15 - 11:33

    Missingno. schrieb:
    --------------------------------------------------------------------------------

    > def void foobar(){
    > foobar();
    > }
    >
    > Es wird ja kaum jemand anzweifeln wollen, dass das eine ziemlich
    > unbeschränkte (sinnlose) Rekursion ist.

    Ja, würde es sein, wird aber einen Compiler error werfen, denn du rufst die Funktion bereits in der Definition auf. Reihenfolge... so wie Crema aussieht, hängen hier Definition und Implementierung untrennbar miteinander zusammen, womit keine einstufigen Rekursionen möglich sind.

  10. Re: Ja.

    Autor: WasntMe 05.08.15 - 11:39

    Missingno. schrieb:
    --------------------------------------------------------------------------------
    > Es gibt auch
    >
    > def int bla() {
    > return 0;
    > }
    >

    Der Teil ist nutzlos, der wird nirgends verwendet.

    > Und da mache ich jetzt gleich noch ein
    >
    > def int bla(a) {
    > if( bla(a) )
    > bla(a+1);
    > else
    > return 0;
    > }
    >
    > draus.

    def int bla(a) {...} ist schon mal Unsinn. Wenn schon, dann def int bla(int a) {...}, dann hast du aber wieder das Problem, dass du in der Definition bereits die Funktion selbst aufrufst.

    Ich denke du willst auf die mehrstufige Rekursion hinaus, also sowas wie

    def int foo() {
    return bar()
    }

    def int bar() {
    return foo()
    }



    3 mal bearbeitet, zuletzt am 05.08.15 11:50 durch WasntMe.

  11. Re: Ja.

    Autor: Ext3h 05.08.15 - 18:40

    Steht zwar nicht im wiki, aber angesichts der Anforderungen an die Sprache gehe ich davon aus, dass für alle Funktionen eine zyklenfreie partielle Ordnung gefordert wird.

    Sprich Rekursion ist komplett ausgeschlossen. Das ist auch wieder relativ simpel nachprüfbar.

  12. Re: Ja.

    Autor: hw75 05.08.15 - 20:03

    Der gravierende Unterschied besteht darin, dass nur for-Schleifen möglich sind, aber keine while-Schleifen. Das wird auch in der theoretischen Informatik ausführlich analysiert. for-Schleifen terminieren *immer*, bei while-Schleifen ist das nicht klar.

    > def int foo() {
    > return bar()
    > }
    >
    > def int bar() {
    > return foo()
    > }

    in dem Beispiel ist bar() noch nicht definiert, evtl gibt es keine forward declarations, ist ja auch kein C. evtl scheitert das Beispiel auch an der Typenkorrektheit, weil die Funktionen einen int Rückgabewert deklarieren, aber nirgends ein int produziert wird.

  1. Thema

Neues Thema Ansicht wechseln


Um zu kommentieren, loggen Sie sich bitte ein oder registrieren Sie sich. Sie müssen ausserdem in Ihrem Account-Profil unter Forum einen Nutzernamen vergeben haben. Zum Login

Stellenmarkt
  1. BHS Corrugated Maschinen- und Anlagenbau GmbH, Weiherhammer
  2. DRÄXLMAIER Group, Vilsbiburg bei Landshut
  3. Ketteler Krankenhaus gemeinnützige GmbH, Offenbach am Main
  4. ALDI International Services GmbH & Co. oHG, Mülheim an der Ruhr, Dortmund, Düsseldorf, Duisburg

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Hardware-Angebote


Haben wir etwas übersehen?

E-Mail an news@golem.de