News for hackers. Stuff that matters.
Re:The Idea of Lisp by smitherfield on Friday December 16, 2016 @01:21PM (#13195400)
I would argue that there's no such thing as a "functional data structure." If a data structure maps poorly to existing functional languages, that's a symptom of an insufficiently powerful and generic type system.

Say you have (pseudocode)

  Array(4 16 5 20)
What's its type?

  Array
  Array<Int>
  Array<4>
  Array<Int 4>
  Array(Int Int Int Int)
None of these lend themselves easily to paradigms other than imperative, true. But this is because they unnecessarily discard known information. The type of an array ought to be itself:

  assert Array(4 16 5 20) hasType Array(4 16 5 20)
    => Ok
  
  assert Array(4 16 5 20) hasType Array<Int>
    => Error("Expected Array<Int> but got Array(4 16 5 20). Hint: Typeclass Array<Int> cannot be directly instantiated")
  
  assert Array(4 16 5 20) hasTypeclass Array<Int>
    => Ok
Fully functional and referentially transparent.
Re:The Idea of Lisp by DonaldFisk on Friday December 16, 2016 @01:59PM (#13195745)
And if you want a new array whose first element is increased by one, you either have to allocate space for the entire array, modify the array, or use a different data structure.
Re:The Idea of Lisp by smitherfield on Friday December 16, 2016 @02:09PM (#13195827)
No you don't, you merely need each index into an array to be a monad over all possible values it can contain. An array is itself and modifications are (take as arguments and return) its indices.
Re:The Idea of Lisp by kazinator on Friday December 16, 2016 @07:32PM (#13198215)
> you merely need each index into an array to be a monad over all possible values it can contain

Now keep a straight face and say "L1 cache" once again.

Re:The Idea of Lisp by DonaldFisk on Friday December 16, 2016 @03:57PM (#13196738)
And how is that implemented under the hood?
Re:The Idea of Lisp by smitherfield on Friday December 16, 2016 @04:37PM (#13197090)
Same as in a higher-level statically typed imperative language: mutable arrays contained within larger dynamic buffers for amoritized constant-time append and prepend.
Re:The Idea of Lisp by DonaldFisk on Saturday December 17, 2016 @09:00AM (#13200728)
So it isn't really functional at all. It just hides the side effects behind a lot of complexity.
Re:The Idea of Lisp by junke on Saturday December 17, 2016 @10:26AM (#13201013)
This is precisely what functional programming does. Purely functional abstractions are just that, abstractions.