News for hackers. Stuff that matters.
Re:Why it’s hard for programmers to write a program to flatt... by wz1000 on Friday February 24, 2017 @02:13PM (#13726691)
I don't really write Java, but I fail to see any easy and robust way to assign a type to the flatten function in Java.

Is this the signature you would expect in a solution to this?

    List<Integer> flatten(List<Object>)
Or something like

    List<Integer> flatten(NestedList<Integer>)
with a definition for NestedList?

Is there even a way to define something like NestedList without coercing back and forth from Object? Is there a way you can do this so that you don't have to basically reimplement List?

Re:Why it’s hard for programmers to write a program to flatt... by dllthomas on Friday February 24, 2017 @02:28PM (#13726847)
Also not a Java programmer, but my approach would probably involve two classes implementing the nested list interface. One would hold a list, the other an integer (or maybe parameterize over that, depending on the context).

Drawing analogy to lisp, we need to be able to answer "is this a list or an atom?"

Note that the actual structure involved is "really" a rose tree.

Re:Why it’s hard for programmers to write a program to flatt... by ng12 on Friday February 24, 2017 @02:15PM (#13726711)
I would either use Object to be quick, or implement a NestedListItem with isNumber(), getNumber(), getList().

The one thing I do like about this problem is it shows when TDD is useful. If you try to write a test case first the representation problem will be the very first thing you run into, and the code will mostly follow from there.

Re:Why it’s hard for programmers to write a program to flatt... by wz1000 on Friday February 24, 2017 @02:28PM (#13726845)
Personally, I think this problem shows why sane type systems are useful.

In Haskell

    data NestedList a = Single a | Nested [NestedList a]
    -- Or equivalently, type NestedList = Free []

    flatten :: NestedList a -> [a]
    -- This is pretty much the only reasonable definition of flatten the compiler will accept given this type
    flatten (Single a) = [a]
    flatten (Nested xs) = concatMap flatten xs

    -- or given the Free variation of NestedList
    -- flatten = retract
Re:Why it’s hard for programmers to write a program to flatt... by dllthomas on Friday February 24, 2017 @02:30PM (#13726862)
Not necessarily. See my bash solution in another comment :-D