Traversing a list until certain criterion is metBigInt for Standard ML/NJHow do I check if a list is empty?Finding the index of an item given a list containing it in PythonWhat is the difference between Python's list methods append and extend?How do you split a list into evenly sized chunks?Does functional programming replace GoF design patterns?Getting the last element of a listHow to make a flat list out of list of listsHow do I get the number of elements in a list?How do I concatenate two lists in Python?How to clone or copy a list?

Windows 10 deletes lots of tiny files super slowly. Anything that can be done to speed it up?

Garage door sticks on a bolt

Why most footers have a background color has a divider of section?

Is it possible to take a database offline when doing a backup using an SQL job?

How to compare integers in Tex?

How do I introduce dark themes?

Which Catholic priests were given diplomatic missions?

Is it mandatory to use contractions in tag questions and the like?

How many space launch vehicles are under development worldwide?

How deep is the liquid in a half-full hemisphere?

Why would an airline put 15 passengers at once on standby?

Should I be on the paper from another PhD student that I constantly went on his meetings?

How many stack cables would be needed if we want to stack two 3850 switches

Why do Russians sometimes spell "жирный" (fatty) as "жырный"?

How to say "respectively" in German when listing (enumerating) things

Difference between two vector layer

If someone asks a question using “quién”, how can one shortly respond?

Why, even after his imprisonment, do people keep calling Hannibal Lecter "Doctor"?

Can an energy drink or chocolate before an exam be useful ? What sort of other edible goods be helpful?

Speed and Velocity in Russian

Is determiner 'a' needed in "one would call such a value a constant"?

What is the meaning of colored vials next to some passive skills

How to study endgames?

Why isn't there armor to protect from spells in the Potterverse?



Traversing a list until certain criterion is met


BigInt for Standard ML/NJHow do I check if a list is empty?Finding the index of an item given a list containing it in PythonWhat is the difference between Python's list methods append and extend?How do you split a list into evenly sized chunks?Does functional programming replace GoF design patterns?Getting the last element of a listHow to make a flat list out of list of listsHow do I get the number of elements in a list?How do I concatenate two lists in Python?How to clone or copy a list?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








0















I would like to create a simple SML program that traverses a list from left to right.Let's say I have a list of N items of K different types.For example the list 1 3 1 3 1 3 3 2 2 1 has 10 numbers of 3(1,2,3) types.



What I would like to to is go through this list from left to right and stop when i have found all K different numbers.In this case I would stop right after stumbling upon the first 2.



This could be done by spliting the list in head and tail in each step and processing the head element.However how could I keep track of the different numbers I have found?



This could be done in C/C++ by simply holding a counter and a boolean array with K elements. If i stumble upon an element i with bool[i]=false i make it true and counter=counter+1.



It is stated though that arrays are not the best option for SML so i was wondering if i have to use another data structure or if i have to create a new function to check each time if i have seen this element before(this would cost in time complexity).










share|improve this question
































    0















    I would like to create a simple SML program that traverses a list from left to right.Let's say I have a list of N items of K different types.For example the list 1 3 1 3 1 3 3 2 2 1 has 10 numbers of 3(1,2,3) types.



    What I would like to to is go through this list from left to right and stop when i have found all K different numbers.In this case I would stop right after stumbling upon the first 2.



    This could be done by spliting the list in head and tail in each step and processing the head element.However how could I keep track of the different numbers I have found?



    This could be done in C/C++ by simply holding a counter and a boolean array with K elements. If i stumble upon an element i with bool[i]=false i make it true and counter=counter+1.



    It is stated though that arrays are not the best option for SML so i was wondering if i have to use another data structure or if i have to create a new function to check each time if i have seen this element before(this would cost in time complexity).










    share|improve this question




























      0












      0








      0








      I would like to create a simple SML program that traverses a list from left to right.Let's say I have a list of N items of K different types.For example the list 1 3 1 3 1 3 3 2 2 1 has 10 numbers of 3(1,2,3) types.



      What I would like to to is go through this list from left to right and stop when i have found all K different numbers.In this case I would stop right after stumbling upon the first 2.



      This could be done by spliting the list in head and tail in each step and processing the head element.However how could I keep track of the different numbers I have found?



      This could be done in C/C++ by simply holding a counter and a boolean array with K elements. If i stumble upon an element i with bool[i]=false i make it true and counter=counter+1.



      It is stated though that arrays are not the best option for SML so i was wondering if i have to use another data structure or if i have to create a new function to check each time if i have seen this element before(this would cost in time complexity).










      share|improve this question
















      I would like to create a simple SML program that traverses a list from left to right.Let's say I have a list of N items of K different types.For example the list 1 3 1 3 1 3 3 2 2 1 has 10 numbers of 3(1,2,3) types.



      What I would like to to is go through this list from left to right and stop when i have found all K different numbers.In this case I would stop right after stumbling upon the first 2.



      This could be done by spliting the list in head and tail in each step and processing the head element.However how could I keep track of the different numbers I have found?



      This could be done in C/C++ by simply holding a counter and a boolean array with K elements. If i stumble upon an element i with bool[i]=false i make it true and counter=counter+1.



      It is stated though that arrays are not the best option for SML so i was wondering if i have to use another data structure or if i have to create a new function to check each time if i have seen this element before(this would cost in time complexity).







      list functional-programming sml smlnj






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 28 at 21:15







      Labyrinthian

















      asked Mar 28 at 19:44









      LabyrinthianLabyrinthian

      291 silver badge6 bronze badges




      291 silver badge6 bronze badges

























          1 Answer
          1






          active

          oldest

          votes


















          2

















          how could I keep track of the different numbers I have found?



          [...] in C/C++ by [...] a boolean array with K elements




          Abstractly I would call the data structure you want a bit set.



          I'll give you two answers, one using a sparse container and one using a bit set.



          Sparse



          I'd use a list to keep track of the elements you've already seen:



          fun curry f x y = f (x, y)

          val empty = []
          fun add x set = curry op:: x set
          fun elem x set = List.exists (curry op= x) set

          fun seen k xs =
          let fun seen_ 0 _ _ = true
          | seen_ _ [] _ = false
          | seen_ k (x::xs) set =
          if elem x set
          then seen_ k xs set
          else seen_ (k-1) xs (add x set)
          in seen_ k xs empty end


          You could also use a balanced binary tree as set type; this would reduce lookup to O(lg n). The advantage of using an actual container (list or tree) rather than a bit array is that of sparse arrays/matrices. This works for ''a lists.



          Bit set




          [...] boolean array with K elements [...]



          If i stumble upon an element i [...]




          Until this point, you haven't said that elements are always unsigned integers from 0 to K-1, which would be a requirement if they should be representable by a unique index in an array of length K.



          SML has a module/type called Word / word for unsigned integers (words). Adding this constraint, the input list should have type word list rather than ''a list.



          When you make an array of primitive types in many imperative, compiled languages, you get mutable, unboxed arrays. SML's Array type is also mutable, but each bool in such an array would be boxed.



          An easy way to get an immutable, unboxed array of bits would be to use bitwise operations on an IntInf (SML/NJ; implementations vary); it would automatically grow as a bit is flipped. This could look like:



          fun bit x = IntInf.<< (1, x)

          val empty = IntInf.fromInt 0
          fun add x set = IntInf.orb (set, bit x)
          fun elem x set = IntInf.> (IntInf.andb (set, bit x), 0)


          The function seen would be the same.



          The fact that k is decreased recursively and that set grows dynamically means that you're not restricted to elements in the range [0,K-1], which would have been the case with an array of size K.



          Example use:



          - seen 5 [0w4, 0w2, 0w1, 0w9];
          val it = false : bool

          - seen 5 [0w1, 0w2, 0w3, 0w4, 0w8];
          val it = true : bool


          This solution uses a lot of memory if the elements are large:



          - seen 1 [0w100000000];
          *eats my memory slowly*
          val it = true : bool


          Additional things you could do:



          • Create a module, structure BitSet = struct ... end that encapsulates an abstract type with the operations empty, add and elem, hiding the particular implementation (whether it's an IntInf.int, or a bool Array.array or an ''a list).

          • Create a function, fun fold_until f e xs = ... that extracts the recursion scheme of seen_ so that you avoid manual recursion; a regular foldl is not enough since it continues until the list is empty. You could build this using error-aware return type or using exceptions.

          • Consider Bloom filters.





          share|improve this answer



























          • Thank you for your answer it cleared a lot of things!What is the time complexiry of the second solution?

            – Labyrinthian
            Mar 29 at 19:24












          • @Labyrinthian: I don't know, what is it? :)

            – Simon Shine
            Apr 1 at 6:18













          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );














          draft saved

          draft discarded
















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55405721%2ftraversing-a-list-until-certain-criterion-is-met%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2

















          how could I keep track of the different numbers I have found?



          [...] in C/C++ by [...] a boolean array with K elements




          Abstractly I would call the data structure you want a bit set.



          I'll give you two answers, one using a sparse container and one using a bit set.



          Sparse



          I'd use a list to keep track of the elements you've already seen:



          fun curry f x y = f (x, y)

          val empty = []
          fun add x set = curry op:: x set
          fun elem x set = List.exists (curry op= x) set

          fun seen k xs =
          let fun seen_ 0 _ _ = true
          | seen_ _ [] _ = false
          | seen_ k (x::xs) set =
          if elem x set
          then seen_ k xs set
          else seen_ (k-1) xs (add x set)
          in seen_ k xs empty end


          You could also use a balanced binary tree as set type; this would reduce lookup to O(lg n). The advantage of using an actual container (list or tree) rather than a bit array is that of sparse arrays/matrices. This works for ''a lists.



          Bit set




          [...] boolean array with K elements [...]



          If i stumble upon an element i [...]




          Until this point, you haven't said that elements are always unsigned integers from 0 to K-1, which would be a requirement if they should be representable by a unique index in an array of length K.



          SML has a module/type called Word / word for unsigned integers (words). Adding this constraint, the input list should have type word list rather than ''a list.



          When you make an array of primitive types in many imperative, compiled languages, you get mutable, unboxed arrays. SML's Array type is also mutable, but each bool in such an array would be boxed.



          An easy way to get an immutable, unboxed array of bits would be to use bitwise operations on an IntInf (SML/NJ; implementations vary); it would automatically grow as a bit is flipped. This could look like:



          fun bit x = IntInf.<< (1, x)

          val empty = IntInf.fromInt 0
          fun add x set = IntInf.orb (set, bit x)
          fun elem x set = IntInf.> (IntInf.andb (set, bit x), 0)


          The function seen would be the same.



          The fact that k is decreased recursively and that set grows dynamically means that you're not restricted to elements in the range [0,K-1], which would have been the case with an array of size K.



          Example use:



          - seen 5 [0w4, 0w2, 0w1, 0w9];
          val it = false : bool

          - seen 5 [0w1, 0w2, 0w3, 0w4, 0w8];
          val it = true : bool


          This solution uses a lot of memory if the elements are large:



          - seen 1 [0w100000000];
          *eats my memory slowly*
          val it = true : bool


          Additional things you could do:



          • Create a module, structure BitSet = struct ... end that encapsulates an abstract type with the operations empty, add and elem, hiding the particular implementation (whether it's an IntInf.int, or a bool Array.array or an ''a list).

          • Create a function, fun fold_until f e xs = ... that extracts the recursion scheme of seen_ so that you avoid manual recursion; a regular foldl is not enough since it continues until the list is empty. You could build this using error-aware return type or using exceptions.

          • Consider Bloom filters.





          share|improve this answer



























          • Thank you for your answer it cleared a lot of things!What is the time complexiry of the second solution?

            – Labyrinthian
            Mar 29 at 19:24












          • @Labyrinthian: I don't know, what is it? :)

            – Simon Shine
            Apr 1 at 6:18















          2

















          how could I keep track of the different numbers I have found?



          [...] in C/C++ by [...] a boolean array with K elements




          Abstractly I would call the data structure you want a bit set.



          I'll give you two answers, one using a sparse container and one using a bit set.



          Sparse



          I'd use a list to keep track of the elements you've already seen:



          fun curry f x y = f (x, y)

          val empty = []
          fun add x set = curry op:: x set
          fun elem x set = List.exists (curry op= x) set

          fun seen k xs =
          let fun seen_ 0 _ _ = true
          | seen_ _ [] _ = false
          | seen_ k (x::xs) set =
          if elem x set
          then seen_ k xs set
          else seen_ (k-1) xs (add x set)
          in seen_ k xs empty end


          You could also use a balanced binary tree as set type; this would reduce lookup to O(lg n). The advantage of using an actual container (list or tree) rather than a bit array is that of sparse arrays/matrices. This works for ''a lists.



          Bit set




          [...] boolean array with K elements [...]



          If i stumble upon an element i [...]




          Until this point, you haven't said that elements are always unsigned integers from 0 to K-1, which would be a requirement if they should be representable by a unique index in an array of length K.



          SML has a module/type called Word / word for unsigned integers (words). Adding this constraint, the input list should have type word list rather than ''a list.



          When you make an array of primitive types in many imperative, compiled languages, you get mutable, unboxed arrays. SML's Array type is also mutable, but each bool in such an array would be boxed.



          An easy way to get an immutable, unboxed array of bits would be to use bitwise operations on an IntInf (SML/NJ; implementations vary); it would automatically grow as a bit is flipped. This could look like:



          fun bit x = IntInf.<< (1, x)

          val empty = IntInf.fromInt 0
          fun add x set = IntInf.orb (set, bit x)
          fun elem x set = IntInf.> (IntInf.andb (set, bit x), 0)


          The function seen would be the same.



          The fact that k is decreased recursively and that set grows dynamically means that you're not restricted to elements in the range [0,K-1], which would have been the case with an array of size K.



          Example use:



          - seen 5 [0w4, 0w2, 0w1, 0w9];
          val it = false : bool

          - seen 5 [0w1, 0w2, 0w3, 0w4, 0w8];
          val it = true : bool


          This solution uses a lot of memory if the elements are large:



          - seen 1 [0w100000000];
          *eats my memory slowly*
          val it = true : bool


          Additional things you could do:



          • Create a module, structure BitSet = struct ... end that encapsulates an abstract type with the operations empty, add and elem, hiding the particular implementation (whether it's an IntInf.int, or a bool Array.array or an ''a list).

          • Create a function, fun fold_until f e xs = ... that extracts the recursion scheme of seen_ so that you avoid manual recursion; a regular foldl is not enough since it continues until the list is empty. You could build this using error-aware return type or using exceptions.

          • Consider Bloom filters.





          share|improve this answer



























          • Thank you for your answer it cleared a lot of things!What is the time complexiry of the second solution?

            – Labyrinthian
            Mar 29 at 19:24












          • @Labyrinthian: I don't know, what is it? :)

            – Simon Shine
            Apr 1 at 6:18













          2














          2










          2










          how could I keep track of the different numbers I have found?



          [...] in C/C++ by [...] a boolean array with K elements




          Abstractly I would call the data structure you want a bit set.



          I'll give you two answers, one using a sparse container and one using a bit set.



          Sparse



          I'd use a list to keep track of the elements you've already seen:



          fun curry f x y = f (x, y)

          val empty = []
          fun add x set = curry op:: x set
          fun elem x set = List.exists (curry op= x) set

          fun seen k xs =
          let fun seen_ 0 _ _ = true
          | seen_ _ [] _ = false
          | seen_ k (x::xs) set =
          if elem x set
          then seen_ k xs set
          else seen_ (k-1) xs (add x set)
          in seen_ k xs empty end


          You could also use a balanced binary tree as set type; this would reduce lookup to O(lg n). The advantage of using an actual container (list or tree) rather than a bit array is that of sparse arrays/matrices. This works for ''a lists.



          Bit set




          [...] boolean array with K elements [...]



          If i stumble upon an element i [...]




          Until this point, you haven't said that elements are always unsigned integers from 0 to K-1, which would be a requirement if they should be representable by a unique index in an array of length K.



          SML has a module/type called Word / word for unsigned integers (words). Adding this constraint, the input list should have type word list rather than ''a list.



          When you make an array of primitive types in many imperative, compiled languages, you get mutable, unboxed arrays. SML's Array type is also mutable, but each bool in such an array would be boxed.



          An easy way to get an immutable, unboxed array of bits would be to use bitwise operations on an IntInf (SML/NJ; implementations vary); it would automatically grow as a bit is flipped. This could look like:



          fun bit x = IntInf.<< (1, x)

          val empty = IntInf.fromInt 0
          fun add x set = IntInf.orb (set, bit x)
          fun elem x set = IntInf.> (IntInf.andb (set, bit x), 0)


          The function seen would be the same.



          The fact that k is decreased recursively and that set grows dynamically means that you're not restricted to elements in the range [0,K-1], which would have been the case with an array of size K.



          Example use:



          - seen 5 [0w4, 0w2, 0w1, 0w9];
          val it = false : bool

          - seen 5 [0w1, 0w2, 0w3, 0w4, 0w8];
          val it = true : bool


          This solution uses a lot of memory if the elements are large:



          - seen 1 [0w100000000];
          *eats my memory slowly*
          val it = true : bool


          Additional things you could do:



          • Create a module, structure BitSet = struct ... end that encapsulates an abstract type with the operations empty, add and elem, hiding the particular implementation (whether it's an IntInf.int, or a bool Array.array or an ''a list).

          • Create a function, fun fold_until f e xs = ... that extracts the recursion scheme of seen_ so that you avoid manual recursion; a regular foldl is not enough since it continues until the list is empty. You could build this using error-aware return type or using exceptions.

          • Consider Bloom filters.





          share|improve this answer
















          how could I keep track of the different numbers I have found?



          [...] in C/C++ by [...] a boolean array with K elements




          Abstractly I would call the data structure you want a bit set.



          I'll give you two answers, one using a sparse container and one using a bit set.



          Sparse



          I'd use a list to keep track of the elements you've already seen:



          fun curry f x y = f (x, y)

          val empty = []
          fun add x set = curry op:: x set
          fun elem x set = List.exists (curry op= x) set

          fun seen k xs =
          let fun seen_ 0 _ _ = true
          | seen_ _ [] _ = false
          | seen_ k (x::xs) set =
          if elem x set
          then seen_ k xs set
          else seen_ (k-1) xs (add x set)
          in seen_ k xs empty end


          You could also use a balanced binary tree as set type; this would reduce lookup to O(lg n). The advantage of using an actual container (list or tree) rather than a bit array is that of sparse arrays/matrices. This works for ''a lists.



          Bit set




          [...] boolean array with K elements [...]



          If i stumble upon an element i [...]




          Until this point, you haven't said that elements are always unsigned integers from 0 to K-1, which would be a requirement if they should be representable by a unique index in an array of length K.



          SML has a module/type called Word / word for unsigned integers (words). Adding this constraint, the input list should have type word list rather than ''a list.



          When you make an array of primitive types in many imperative, compiled languages, you get mutable, unboxed arrays. SML's Array type is also mutable, but each bool in such an array would be boxed.



          An easy way to get an immutable, unboxed array of bits would be to use bitwise operations on an IntInf (SML/NJ; implementations vary); it would automatically grow as a bit is flipped. This could look like:



          fun bit x = IntInf.<< (1, x)

          val empty = IntInf.fromInt 0
          fun add x set = IntInf.orb (set, bit x)
          fun elem x set = IntInf.> (IntInf.andb (set, bit x), 0)


          The function seen would be the same.



          The fact that k is decreased recursively and that set grows dynamically means that you're not restricted to elements in the range [0,K-1], which would have been the case with an array of size K.



          Example use:



          - seen 5 [0w4, 0w2, 0w1, 0w9];
          val it = false : bool

          - seen 5 [0w1, 0w2, 0w3, 0w4, 0w8];
          val it = true : bool


          This solution uses a lot of memory if the elements are large:



          - seen 1 [0w100000000];
          *eats my memory slowly*
          val it = true : bool


          Additional things you could do:



          • Create a module, structure BitSet = struct ... end that encapsulates an abstract type with the operations empty, add and elem, hiding the particular implementation (whether it's an IntInf.int, or a bool Array.array or an ''a list).

          • Create a function, fun fold_until f e xs = ... that extracts the recursion scheme of seen_ so that you avoid manual recursion; a regular foldl is not enough since it continues until the list is empty. You could build this using error-aware return type or using exceptions.

          • Consider Bloom filters.






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Mar 29 at 13:39

























          answered Mar 29 at 12:28









          Simon ShineSimon Shine

          11k1 gold badge31 silver badges53 bronze badges




          11k1 gold badge31 silver badges53 bronze badges















          • Thank you for your answer it cleared a lot of things!What is the time complexiry of the second solution?

            – Labyrinthian
            Mar 29 at 19:24












          • @Labyrinthian: I don't know, what is it? :)

            – Simon Shine
            Apr 1 at 6:18

















          • Thank you for your answer it cleared a lot of things!What is the time complexiry of the second solution?

            – Labyrinthian
            Mar 29 at 19:24












          • @Labyrinthian: I don't know, what is it? :)

            – Simon Shine
            Apr 1 at 6:18
















          Thank you for your answer it cleared a lot of things!What is the time complexiry of the second solution?

          – Labyrinthian
          Mar 29 at 19:24






          Thank you for your answer it cleared a lot of things!What is the time complexiry of the second solution?

          – Labyrinthian
          Mar 29 at 19:24














          @Labyrinthian: I don't know, what is it? :)

          – Simon Shine
          Apr 1 at 6:18





          @Labyrinthian: I don't know, what is it? :)

          – Simon Shine
          Apr 1 at 6:18




















          draft saved

          draft discarded















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid …


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55405721%2ftraversing-a-list-until-certain-criterion-is-met%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          How to preserve electronics (computers, tablets and phones) for hundreds of years Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) The network's official Twitter account is up and running again. What content…How might modern humans leave a message for 50,000 years?How would an aquatic race develop computers?How do we make computers care for human life?Keeping supplies for 1000 yearsWhat will cell phones become in 100 years?What body armor protects against a laser?Could a society attain 1800s technology if limited to using copper and bronze?Electricity power (magic) and electronicsScavenging metal resources in post-apocalypse after 100 yearsWhy would precursors create devices that can survive and still work after hundreds of years?

          155 수학 과학 기타 둘러보기 메뉴eh추가해eh문서를 완성해

          Convert JSON to MapSimplest way to convert a string representing JSON array into Java array List of key value pairsHow to take String JSON values into HashMapConvert a JSON String to a HashMapCreating BSON object from JSON stringJSONObject - How to get a value ?Better Map ConstructorReading JSON from Url javaUpdate columns if input values are not null otherwise ignore and keep the existing values of column in databaseHow to store object represented as Json string into Couchbase Lite?Go JSON into MapHow do I efficiently iterate over each entry in a Java Map?Sort a Map<Key, Value> by valuesHow to round a number to n decimal places in JavaCan comments be used in JSON?How do I read / convert an InputStream into a String in Java?How can I pretty-print JSON in a shell script?What is the correct JSON content type?How can I deserialize JSON to a simple Dictionary<string,string> in ASP.NET?Why does Google prepend while(1); to their JSON responses?Parse JSON in JavaScript?