Concise way of “updating” element in nested collectionsCached empty collectionsMost concise Python radix function using functional constructions?Covariance in generic collectionsis there a more functionally idiomatic way of generating valid dates in f#?Creating a reusable C#.NET Oracle Query BuilderCounting items in categoriesTraffic Flow functional wayDetecting properly nested parenthesis using functional programmingSaving or updating to databseImplement array element swap in a functional language

Took a trip to a parallel universe, need help deciphering

Can I ask the recruiters in my resume to put the reason why I am rejected?

Facing a paradox: Earnshaw's theorem in one dimension

If human space travel is limited by the G force vulnerability, is there a way to counter G forces?

How can I fix/modify my tub/shower combo so the water comes out of the showerhead?

Where does SFDX store details about scratch orgs?

How to prevent "they're falling in love" trope

Arrow those variables!

What's the difference between 'rename' and 'mv'?

Modeling an IP Address

Would Slavery Reparations be considered Bills of Attainder and hence Illegal?

How to draw the figure with four pentagons?

Is it inappropriate for a student to attend their mentor's dissertation defense?

90's TV series where a boy goes to another dimension through portal near power lines

What to put in ESTA if staying in US for a few days before going on to Canada

1960's book about a plague that kills all white people

I'm flying to France today and my passport expires in less than 2 months

Watching something be written to a file live with tail

Why are electrically insulating heatsinks so rare? Is it just cost?

What is the most common color to indicate the input-field is disabled?

What is going on with Captain Marvel's blood colour?

Why is Collection not simply treated as Collection<?>

Were any external disk drives stacked vertically?

Theorems that impeded progress



Concise way of “updating” element in nested collections


Cached empty collectionsMost concise Python radix function using functional constructions?Covariance in generic collectionsis there a more functionally idiomatic way of generating valid dates in f#?Creating a reusable C#.NET Oracle Query BuilderCounting items in categoriesTraffic Flow functional wayDetecting properly nested parenthesis using functional programmingSaving or updating to databseImplement array element swap in a functional language






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








0












$begingroup$


Imagine simple game:



type Combatant = 
hp : int
attack : int


type CombatantGroup = Combatant list
type CombatantGroups = CombatantGroup list

type Battle =
combatantGroups : CombatantGroups




there is some battle, in which some amount groups participate. In each group there is several combatants. Now I want to implement a function for one combatant to attack another. Due to immutability, I have to replace whole attacked target, and whole group and whole battle. If the battle was just between two participants, I could write code like this:



if target = battle.combatant1 then
battle with combatant1 = battle.combatant1 with hp = battle.combatant1.hp - attacker.attack
else
battle with combatant2 = battle.combatant2 with hp = battle.combatant2.hp - attacker.attack


which is also terrible code, I would appreciate any advice on it. But with nested collections it gets even more complicated, and event doesn't look functional to me anymore:



let containsTarget = List.contains target 
let transformCombatant combatant = if combatant = target then combatant with hp = combatant.hp - attacker.attack else combatant
let transformGroup = List.map transformCombatant
let checkGroup group =
if group |> containsTarget then
group |> transformGroup
else
group
let transformGroups = List.map checkGroup

battle with combatantGroups = transformGroups battle.combatantGroups


Can you please give me advise on how can I use features of F# and functional programming, to make given code more pretty and concise?









share







New contributor




Dmitry Pavlushin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$


















    0












    $begingroup$


    Imagine simple game:



    type Combatant = 
    hp : int
    attack : int


    type CombatantGroup = Combatant list
    type CombatantGroups = CombatantGroup list

    type Battle =
    combatantGroups : CombatantGroups




    there is some battle, in which some amount groups participate. In each group there is several combatants. Now I want to implement a function for one combatant to attack another. Due to immutability, I have to replace whole attacked target, and whole group and whole battle. If the battle was just between two participants, I could write code like this:



    if target = battle.combatant1 then
    battle with combatant1 = battle.combatant1 with hp = battle.combatant1.hp - attacker.attack
    else
    battle with combatant2 = battle.combatant2 with hp = battle.combatant2.hp - attacker.attack


    which is also terrible code, I would appreciate any advice on it. But with nested collections it gets even more complicated, and event doesn't look functional to me anymore:



    let containsTarget = List.contains target 
    let transformCombatant combatant = if combatant = target then combatant with hp = combatant.hp - attacker.attack else combatant
    let transformGroup = List.map transformCombatant
    let checkGroup group =
    if group |> containsTarget then
    group |> transformGroup
    else
    group
    let transformGroups = List.map checkGroup

    battle with combatantGroups = transformGroups battle.combatantGroups


    Can you please give me advise on how can I use features of F# and functional programming, to make given code more pretty and concise?









    share







    New contributor




    Dmitry Pavlushin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.







    $endgroup$














      0












      0








      0





      $begingroup$


      Imagine simple game:



      type Combatant = 
      hp : int
      attack : int


      type CombatantGroup = Combatant list
      type CombatantGroups = CombatantGroup list

      type Battle =
      combatantGroups : CombatantGroups




      there is some battle, in which some amount groups participate. In each group there is several combatants. Now I want to implement a function for one combatant to attack another. Due to immutability, I have to replace whole attacked target, and whole group and whole battle. If the battle was just between two participants, I could write code like this:



      if target = battle.combatant1 then
      battle with combatant1 = battle.combatant1 with hp = battle.combatant1.hp - attacker.attack
      else
      battle with combatant2 = battle.combatant2 with hp = battle.combatant2.hp - attacker.attack


      which is also terrible code, I would appreciate any advice on it. But with nested collections it gets even more complicated, and event doesn't look functional to me anymore:



      let containsTarget = List.contains target 
      let transformCombatant combatant = if combatant = target then combatant with hp = combatant.hp - attacker.attack else combatant
      let transformGroup = List.map transformCombatant
      let checkGroup group =
      if group |> containsTarget then
      group |> transformGroup
      else
      group
      let transformGroups = List.map checkGroup

      battle with combatantGroups = transformGroups battle.combatantGroups


      Can you please give me advise on how can I use features of F# and functional programming, to make given code more pretty and concise?









      share







      New contributor




      Dmitry Pavlushin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.







      $endgroup$




      Imagine simple game:



      type Combatant = 
      hp : int
      attack : int


      type CombatantGroup = Combatant list
      type CombatantGroups = CombatantGroup list

      type Battle =
      combatantGroups : CombatantGroups




      there is some battle, in which some amount groups participate. In each group there is several combatants. Now I want to implement a function for one combatant to attack another. Due to immutability, I have to replace whole attacked target, and whole group and whole battle. If the battle was just between two participants, I could write code like this:



      if target = battle.combatant1 then
      battle with combatant1 = battle.combatant1 with hp = battle.combatant1.hp - attacker.attack
      else
      battle with combatant2 = battle.combatant2 with hp = battle.combatant2.hp - attacker.attack


      which is also terrible code, I would appreciate any advice on it. But with nested collections it gets even more complicated, and event doesn't look functional to me anymore:



      let containsTarget = List.contains target 
      let transformCombatant combatant = if combatant = target then combatant with hp = combatant.hp - attacker.attack else combatant
      let transformGroup = List.map transformCombatant
      let checkGroup group =
      if group |> containsTarget then
      group |> transformGroup
      else
      group
      let transformGroups = List.map checkGroup

      battle with combatantGroups = transformGroups battle.combatantGroups


      Can you please give me advise on how can I use features of F# and functional programming, to make given code more pretty and concise?







      .net functional-programming f#





      share







      New contributor




      Dmitry Pavlushin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.










      share







      New contributor




      Dmitry Pavlushin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      share



      share






      New contributor




      Dmitry Pavlushin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 4 mins ago









      Dmitry PavlushinDmitry Pavlushin

      1011




      1011




      New contributor




      Dmitry Pavlushin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Dmitry Pavlushin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Dmitry Pavlushin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




















          0






          active

          oldest

          votes












          Your Answer





          StackExchange.ifUsing("editor", function ()
          return StackExchange.using("mathjaxEditing", function ()
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          );
          );
          , "mathjax-editing");

          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: "196"
          ;
          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: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          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/3.0/"u003ecc by-sa 3.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
          );



          );






          Dmitry Pavlushin is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216909%2fconcise-way-of-updating-element-in-nested-collections%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          Dmitry Pavlushin is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded


















          Dmitry Pavlushin is a new contributor. Be nice, and check out our Code of Conduct.












          Dmitry Pavlushin is a new contributor. Be nice, and check out our Code of Conduct.











          Dmitry Pavlushin is a new contributor. Be nice, and check out our Code of Conduct.














          Thanks for contributing an answer to Code Review Stack Exchange!


          • 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.

          Use MathJax to format equations. MathJax reference.


          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%2fcodereview.stackexchange.com%2fquestions%2f216909%2fconcise-way-of-updating-element-in-nested-collections%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

          名間水力發電廠 目录 沿革 設施 鄰近設施 註釋 外部連結 导航菜单23°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.7113923°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.71139計畫概要原始内容臺灣第一座BOT 模式開發的水力發電廠-名間水力電廠名間水力發電廠 水利署首件BOT案原始内容《小檔案》名間電廠 首座BOT水力發電廠原始内容名間電廠BOT - 經濟部水利署中區水資源局

          Prove that NP is closed under karp reduction?Space(n) not closed under Karp reductions - what about NTime(n)?Class P is closed under rotation?Prove or disprove that $NL$ is closed under polynomial many-one reductions$mathbfNC_2$ is closed under log-space reductionOn Karp reductionwhen can I know if a class (complexity) is closed under reduction (cook/karp)Check if class $PSPACE$ is closed under polyonomially space reductionIs NPSPACE also closed under polynomial-time reduction and under log-space reduction?Prove PSPACE is closed under complement?Prove PSPACE is closed under union?

          Is my guitar’s action too high? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)Strings too stiff on a recently purchased acoustic guitar | Cort AD880CEIs the action of my guitar really high?Μy little finger is too weak to play guitarWith guitar, how long should I give my fingers to strengthen / callous?When playing a fret the guitar sounds mutedPlaying (Barre) chords up the guitar neckI think my guitar strings are wound too tight and I can't play barre chordsF barre chord on an SG guitarHow to find to the right strings of a barre chord by feel?High action on higher fret on my steel acoustic guitar