Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Cpi - uusi järjestelmäkieli

Oskuz [24.01.2016 14:28:25]

#

https://github.com/cpi-lang/cpi
Ominaisuuksia:
Uusi jännä syntaksi :)
Funktiot voi palauttaa monta arvoa.
Muuten muistuttaa Rustia.

-- kommentti
require "c.cpi"

module fizzbuzz
{
    main := {} =>
    {
        i ::= 0;
        while i < 100
        {
            import c.io;

            if i mod 15 == 0  { println("fizzbuzz"); }
            elif i mod 3 == 0  { println("fizz"); }
            elif i mod 5 == 0  { println("buzz"); }
            else { i | print_i32; }

                i += 1;
        }
    }
}

fergusq [24.01.2016 16:17:18]

#

Mistä sinä löysit tämän vai oletko tehnyt tämän itse?

Huomioita:

rec-avainsana on hyvin älykäs. On outoa, kuinka harvassa kielessä on vastaava ominaisuus.

cpi-lang kirjoitti:

People go absolutely nuts for multiple return values. It's really easy in this language, just return an anonymous struct

En vielä sanoisi, että "nimettömän structin" palauttaminen on sama asia kuin monta paluuarvoa. Lähes kaikissa kielissä voi palauttaa listan tai vastaavan, eikä sitä silti nimitetä niin. Esimerkiksi Luassa voi palauttaa monta arvoa, jolloin samat arvot voi myös esimerkiksi ottaa vastaan kahteen muuttujaan:

function f() return 1, 2 end
a, b = f()

Toinen mikä pistää silmään on kuinka ..|-operaattori lisää argumentit funktiokutsun vasempaan laitaan. Tämä ei välttämättä toimi hyvin, jos kyseessä on funktio, joka ottaa vaihtelevan määrän argumentteja oikeaan laitaan. Sellaiselle ominaisuudelle ei tosin ole vielä tukea.

Oskuz [24.01.2016 18:16:22]

#

fergusq kirjoitti:

Mistä sinä löysit tämän vai oletko tehnyt tämän itse?

Redditissä törmäsin.

vinsentti [24.01.2016 18:40:49]

#

fergusq kirjoitti:

rec-avainsana on hyvin älykäs. On outoa, kuinka harvassa kielessä on vastaava ominaisuus.

Niin on. Esim Eiffel kirjallisuudessa ei pikkuseikkana edes mainita rekursiivisuutta, mutta se on näköjään toteutettu tavalliseen tapaan käyttäen omaa nimeä. Perityn luokan samannimiselle funktiolle on kyllä avainsana Precursor.

vinsentti [01.02.2016 11:06:02]

#

MLssä on rec-avainsana näkyy olevan jossakin muussa käytössä. Rekursiivinen kertoma kirjoitetaan perinteiseen tyyliin n*factorial(n-1). Rekursiivisuudella on kielissä vain pieni rooli. Aiheena olevan kaltaisia minikieliä lukuunottamatta.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta