6 ms·
arr // [(idx,newvalue)] (//) is a function that takes an array and a list of pairs of indexes and values and returns an array with those indexes set to those v
by mej10 9y ago
arr // [(idx,newvalue)]
(//) is a function that takes an array and a list of pairs of indexes and values and returns an array with those indexes set to those values.
- _polymer_ 9y agoI assumed there must be something like this, but that notation is a pain. What's wrong with something like "set arr idx newvalue"?
- tome 9y ago> What's wrong with something like "set arr idx newvalue"? Nothing. See here: https://news.ycombinator.com/item?id=15017853 https://news.ycombinator.com/item?id=15017853 It's called "writeArray".
- jordigh 9y agoPrelude> let x = [1, 2, 3] Prelude> x [1,2,3] Prelude> x // [(2,42)] <interactive>:5:3: Not in scope: `//' Perhaps you meant one of these: `/' (imported from Prelude), `/=' (imported from Prelude) So, how canonical is this if it's not in Prelude?
- mej10 9y agoI understand the source of your question -- not all languages provide arrays in the included-by-default namespace. Python for example requires you to import an array module. These are part of the standard library in both cases. This makes it a little harder to get started but considering the kinds of things programmers put up with on a daily basis is extremely mild.
- berdario 9y agoThe Prelude is just what's visible in the default namespace, it's not the whole language Data.Array and // are also described in the Haskell 2010 report https://www.haskell.org/onlinereport/haskell2010/haskellch14.html https://www.haskell.org/onlinereport/haskell2010/haskellch14...
- tome 9y agoFurther to the other answers given, `[1, 2, 3]` is not an array, but rather a list.
- mitchty 9y agoThe prelude isn't everything in Haskell. Just like you need to import sys or do import re in python to get at things less used here too you have to do the same. λ :m Data.Array λ let x = array (1,3) [(1,1), (2,2), (3,3)] x :: (Num e, Num i, Ix i) => Array i e λ x array (1,3) [(1,1),(2,2),(3,3)] it :: (Ix i, Num i, Num e) => Array i e λ x // [(2,42)] array (1,3) [(1,1),(2,42),(3,3)] it :: (Num i, Num e, Ix i) => Array i e λ x array (1,3) [(1,1),(2,2),(3,3)] it :: (Ix i, Num i, Num e) => Array i e Note however that this isn't mutating x directly, to do mutation would require state or a monad.
- ashark 9y agoThis is reinforcing my impression of Haskell's idiomatic aesthetic as "really bad Perl".
- deleted 9y ago[deleted]
- mej10 9y agoThat's a shame, since once you understand it it really is beautiful.