No nechtěl jsem to zvrhnout na debatu, který jazyk je lepší...
To je téměř stejně dlouhé jako řešení v c. Slušný jazyk by měl umožňovat vygenerování podobné tabulky jedinou vektorizovanou operací, pouze s použitím vestavěných funkcí a operátorů.
Tak haskell zrovna žádné vestavěné operátory nemá.. takže to je už z pricipu nepoužitelný jazyk....
hyper :: (Functor f, Functor g) => (a -> b -> c) -> f a -> g b -> f (g c)
hyper f xs ys = fmap (flip fmap ys . f) xs
(<<*>>) :: (Functor f, Functor g, Num a) => f a -> g a -> f (g a)
(<<*>>) = hyper (*)
A hned má haskel hyperoperátor... on už to dokonce někdo napsal v nějaké knihovně.... ale asi se to zrovna často nepoužívá - jo a není to omezené na listy, ale funguje to na jakýkoliv funktor.
Tisk tabulky je také hodně ukecaný a printf ani není součástí prelude. Haskell sucks.
Printf je taky docela hnusná funkce, která by principiálně v žádném pořádném programu být neměla, poněvdž není staticky typovaná... mně perl vždycky přidal nepoužitelný, protože mám asi moc krátkodobou paměť a to kvantum různých symbolů jsem prostě nebyl schopen vstřebat (což je taky případ toho <<*>> - když to použiju jednou za rok, jak si pak budu pamatovat, co to znamená?). Ale slyšel jsem, že v Perlu6 je spousta věcí vymyšlena dobře - jak tam funguje static typing? Zahlédl jsem, že to umí - co to tedy umí?
To není stejné. Hyperoperátor je obecnější verze zippWith, ale narozdíl od zippWith funguje rekurzivně a ve verzi s šipkami dovnitř, kterou jsem použil,
cyklicky opakuje kratší ze sekvencí. V jednostranné variantě se dá použít jako map.
pro můj konkrétní případ použití, kdy je nalevo ploché pole a napravo pole polí, by fungovalo tohle:
hyper = (\f x y -> zipWith (\xx yy -> zipWith f (cycle [xx]) yy) x $ cycle y)
implementovat to obecně nebude jednoduché, protože to musí pracovat s poli typu [1,2,[3,4]].
https://docs.perl6.org/language/operatorsna abc vycházel skvělý seriál
http://www.abclinuxu.cz/blog/wamba/perlMé znalosti přibližně odpovídají rozsahu toho seriálu. O statickém typování nic nevím.