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; } } }
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.
fergusq kirjoitti:
Mistä sinä löysit tämän vai oletko tehnyt tämän itse?
Redditissä törmäsin.
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.