take(3,[1..])
ma jinou hodnotu podle toho, jaky mas jazyk. Muze to byt [1,2,3] nebo ⊥
Ok, beru. Jistě můžu mít jazyk s libovolně nesmyslnou sémantikou. Třeba takovou, že 1+1 = ⊥ nebo take(3,[1..]) = ⊥. Takže formálně máš pravdu, uznávám. Bavíme se ale o tom, jestli by takový jazyk mělo smysl vytvářet. Já říkám, že si nedovedu moc představit, k čemu by bylo dobré mít pure jazyk bez línosti.
Jaký
význam má pojem "nelínost" u pure jazyka? Že se občas zacyklí na něčem, na čem by se zacyklit nemusel? Vlastnost líný/nelíný prostě zásadně ovlivňuje chování u ne-pure jazyků, ale u pure jazyků nemá na nic vliv (kromě tohodle případu, kde je jenom na škodu).
U ne-pure jazyků totiž výraz musím vyhodnotit pokaždé, kdy mě zajímá jeho hodnota. U pure jazyka mi stačí ho vyhodnotit jednou. Proto je mi celkem jedno, kdy to udělám. V principu bych tu tvoji sémantiku mohl korektně naplnit i tak, že si předem zjistím, že se program nutně dostane k vyhodnocování take(3,[1..]), takže se na celý program vykašlu a hned spustím "for( ; ; ) ;"