Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. A little F# for you

A little F# for you

Scheduled Pinned Locked Moved The Lounge
csharpphpwpfcomregex
113 Posts 48 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Justin Perez

    Ravel, you are one smart kid. I read your profile yesterday, and it baffels me how smart you are. You have a really bright future ahead of you. I really hope you didn't listen to Captin See Sharp yesterday. Don't do anything dumb!

    I get all the news I need from the weather report - Paul Simon (from "The Only Living Boy in New York")

    S Offline
    S Offline
    soap brain
    wrote on last edited by
    #15

    :-O:-O:-O:-O:-O:-O:-O:-O:-O:-O:-O:-O:-O:-O I'm not sure if it's possible to blush or be embarrassed to death, but I shall try! Uh, ahem! Anyway...pretending that was never uttered by me...:~ Umm....you've really...struck me dumb. I'm quite literally speechless. Not a word, a sentiment, an opinion, or even a sardonic quip. :cool: But no, I won't do anything like that. I promise. :rose:

    Mmmbop, ba duba dop Ba du bop, ba duba dop Ba du bop, ba duba dop Ba du, yeah Mmmbop, ba duba dop Ba du bop, Ba du dop Ba du bop, Ba du dop Ba du, yeah

    J 1 Reply Last reply
    0
    • J Josh Smith

      I've been studying F# a lot recently and find it really mind-bending.  Tomas Petricek, a fellow CPian, let me sneak preview his series of F# articles and they are very good.  I took one of his examples and modified it a bit.  The following code displays "sum = 6", but how that happens is other-worldly...check it out:

      #light

      let rec sum nums =
        match nums with
        | head::tail -> head + sum(tail)
        | [] -> 0
       
      printf "sum = %i" (sum [1; 2; 3])

      Weird, eh?   F# is coooool. :cool:

      :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

      L Offline
      L Offline
      leppie
      wrote on last edited by
      #16

      Thats simply a map/reduce pattern, also called folding. Here is a Scheme example:

      (define (fold func accum lst)
      (if (null? lst)
      accum
      (fold func (func accum (car lst)) (cdr lst))))

      (define (sum . lst) (fold + 0 lst))

      (display "sum = ")
      (display (sum 1 2 3)) ; prints 6 (0 + 1 + 2 + 3)
      (newline)

      (define (product . lst) (fold * 1 lst))
      (display "product = ")
      (display (product 1 2 3)) ; prints 6 (1 * 1 * 2 * 3)

      xacc.ide
      The rule of three: "The first time you notice something that might repeat, don't generalize it. The second time the situation occurs, develop in a similar fashion -- possibly even copy/paste -- but don't generalize yet. On the third time, look to generalize the approach."

      J B S P 4 Replies Last reply
      0
      • J Josh Smith

        I've been studying F# a lot recently and find it really mind-bending.  Tomas Petricek, a fellow CPian, let me sneak preview his series of F# articles and they are very good.  I took one of his examples and modified it a bit.  The following code displays "sum = 6", but how that happens is other-worldly...check it out:

        #light

        let rec sum nums =
          match nums with
          | head::tail -> head + sum(tail)
          | [] -> 0
         
        printf "sum = %i" (sum [1; 2; 3])

        Weird, eh?   F# is coooool. :cool:

        :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

        D Offline
        D Offline
        Douglas Troy
        wrote on last edited by
        #17

        You know your a nerd when ...

        Josh Smith wrote:

        Weird, eh? F# is coooool.


        :..::. Douglas H. Troy ::..
        Bad Astronomy |VCF|wxWidgets|WTL

        J 1 Reply Last reply
        0
        • L leppie

          Thats simply a map/reduce pattern, also called folding. Here is a Scheme example:

          (define (fold func accum lst)
          (if (null? lst)
          accum
          (fold func (func accum (car lst)) (cdr lst))))

          (define (sum . lst) (fold + 0 lst))

          (display "sum = ")
          (display (sum 1 2 3)) ; prints 6 (0 + 1 + 2 + 3)
          (newline)

          (define (product . lst) (fold * 1 lst))
          (display "product = ")
          (display (product 1 2 3)) ; prints 6 (1 * 1 * 2 * 3)

          xacc.ide
          The rule of three: "The first time you notice something that might repeat, don't generalize it. The second time the situation occurs, develop in a similar fashion -- possibly even copy/paste -- but don't generalize yet. On the third time, look to generalize the approach."

          J Offline
          J Offline
          Josh Smith
          wrote on last edited by
          #18

          leppie wrote:

          Here is a Scheme example:

          Wow, Scheme makes F# look "normal." :wtf:

          :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

          L 1 Reply Last reply
          0
          • D Douglas Troy

            You know your a nerd when ...

            Josh Smith wrote:

            Weird, eh? F# is coooool.


            :..::. Douglas H. Troy ::..
            Bad Astronomy |VCF|wxWidgets|WTL

            J Offline
            J Offline
            Josh Smith
            wrote on last edited by
            #19

            Douglas Troy wrote:

            You know your a nerd when ...

            Takes one to know one. ;P

            :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

            D 1 Reply Last reply
            0
            • J Josh Smith

              I've been studying F# a lot recently and find it really mind-bending.  Tomas Petricek, a fellow CPian, let me sneak preview his series of F# articles and they are very good.  I took one of his examples and modified it a bit.  The following code displays "sum = 6", but how that happens is other-worldly...check it out:

              #light

              let rec sum nums =
                match nums with
                | head::tail -> head + sum(tail)
                | [] -> 0
               
              printf "sum = %i" (sum [1; 2; 3])

              Weird, eh?   F# is coooool. :cool:

              :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

              B Offline
              B Offline
              Brady Kelly
              wrote on last edited by
              #20

              I get it, but I couldn't do it. Match says if nums is null, return 0, otherwise return head + sum(tail). But: What does the "head::tail ->" mean?

              L J 2 Replies Last reply
              0
              • J Josh Smith

                leppie wrote:

                Here is a Scheme example:

                Wow, Scheme makes F# look "normal." :wtf:

                :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

                L Offline
                L Offline
                leppie
                wrote on last edited by
                #21

                But once you learn it :) Having a brace matching editor is rather essential for any function more than a few lines.

                xacc.ide
                The rule of three: "The first time you notice something that might repeat, don't generalize it. The second time the situation occurs, develop in a similar fashion -- possibly even copy/paste -- but don't generalize yet. On the third time, look to generalize the approach."

                1 Reply Last reply
                0
                • B Brady Kelly

                  I get it, but I couldn't do it. Match says if nums is null, return 0, otherwise return head + sum(tail). But: What does the "head::tail ->" mean?

                  L Offline
                  L Offline
                  leppie
                  wrote on last edited by
                  #22

                  Thats the pattern matcher I assume :)

                  xacc.ide
                  The rule of three: "The first time you notice something that might repeat, don't generalize it. The second time the situation occurs, develop in a similar fashion -- possibly even copy/paste -- but don't generalize yet. On the third time, look to generalize the approach."

                  B 1 Reply Last reply
                  0
                  • L leppie

                    Thats simply a map/reduce pattern, also called folding. Here is a Scheme example:

                    (define (fold func accum lst)
                    (if (null? lst)
                    accum
                    (fold func (func accum (car lst)) (cdr lst))))

                    (define (sum . lst) (fold + 0 lst))

                    (display "sum = ")
                    (display (sum 1 2 3)) ; prints 6 (0 + 1 + 2 + 3)
                    (newline)

                    (define (product . lst) (fold * 1 lst))
                    (display "product = ")
                    (display (product 1 2 3)) ; prints 6 (1 * 1 * 2 * 3)

                    xacc.ide
                    The rule of three: "The first time you notice something that might repeat, don't generalize it. The second time the situation occurs, develop in a similar fashion -- possibly even copy/paste -- but don't generalize yet. On the third time, look to generalize the approach."

                    B Offline
                    B Offline
                    Brady Kelly
                    wrote on last edited by
                    #23

                    Now that hurts! :~

                    1 Reply Last reply
                    0
                    • J Josh Smith

                      I've been studying F# a lot recently and find it really mind-bending.  Tomas Petricek, a fellow CPian, let me sneak preview his series of F# articles and they are very good.  I took one of his examples and modified it a bit.  The following code displays "sum = 6", but how that happens is other-worldly...check it out:

                      #light

                      let rec sum nums =
                        match nums with
                        | head::tail -> head + sum(tail)
                        | [] -> 0
                       
                      printf "sum = %i" (sum [1; 2; 3])

                      Weird, eh?   F# is coooool. :cool:

                      :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

                      P Offline
                      P Offline
                      Pete OHanlon
                      wrote on last edited by
                      #24

                      Ah, once more in the key of G.

                      Deja View - the feeling that you've seen this post before.

                      1 Reply Last reply
                      0
                      • J Josh Smith

                        I've been studying F# a lot recently and find it really mind-bending.  Tomas Petricek, a fellow CPian, let me sneak preview his series of F# articles and they are very good.  I took one of his examples and modified it a bit.  The following code displays "sum = 6", but how that happens is other-worldly...check it out:

                        #light

                        let rec sum nums =
                          match nums with
                          | head::tail -> head + sum(tail)
                          | [] -> 0
                         
                        printf "sum = %i" (sum [1; 2; 3])

                        Weird, eh?   F# is coooool. :cool:

                        :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

                        R Offline
                        R Offline
                        Rama Krishna Vavilala
                        wrote on last edited by
                        #25

                        Not very different than prolog or scheme (my favorite language). Prolog:

                        sum([X | Y], Z) :- sum(Y, A), Z is A + X.
                        sum([], 0).

                        Scheme:

                        (define sum (lambda (x)
                        (if (null? x) 0 (+ (car x) (sum (cdr x))))))

                        Co-Author ASP.NET AJAX in Action

                        L J 2 Replies Last reply
                        0
                        • L leppie

                          Thats the pattern matcher I assume :)

                          xacc.ide
                          The rule of three: "The first time you notice something that might repeat, don't generalize it. The second time the situation occurs, develop in a similar fashion -- possibly even copy/paste -- but don't generalize yet. On the third time, look to generalize the approach."

                          B Offline
                          B Offline
                          Brady Kelly
                          wrote on last edited by
                          #26

                          OK, F# isn't going to be a one night stand.

                          G 1 Reply Last reply
                          0
                          • J Josh Smith

                            I've been studying F# a lot recently and find it really mind-bending.  Tomas Petricek, a fellow CPian, let me sneak preview his series of F# articles and they are very good.  I took one of his examples and modified it a bit.  The following code displays "sum = 6", but how that happens is other-worldly...check it out:

                            #light

                            let rec sum nums =
                              match nums with
                              | head::tail -> head + sum(tail)
                              | [] -> 0
                             
                            printf "sum = %i" (sum [1; 2; 3])

                            Weird, eh?   F# is coooool. :cool:

                            :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

                            Q Offline
                            Q Offline
                            QuiJohn
                            wrote on last edited by
                            #27

                            F# you too.


                            Faith is a fine invention For gentlemen who see; But microscopes are prudent In an emergency! -Emily Dickinson

                            J D 2 Replies Last reply
                            0
                            • B Brady Kelly

                              I get it, but I couldn't do it. Match says if nums is null, return 0, otherwise return head + sum(tail). But: What does the "head::tail ->" mean?

                              J Offline
                              J Offline
                              Josh Smith
                              wrote on last edited by
                              #28

                              // Use the "lightweight" syntax, meaning whitespace has meaning now.
                              #light

                              // 'rec' means the function is recursive
                              // 'sum' is the function name
                              // 'nums' is the list of int which is passed in
                              let rec sum nums =
                              // 'match' indicates that we're going to perform some pattern matching on the values in 'nums'
                                match nums with
                              // 'head::tail' means "if it exists, remove the first item in the list
                              // '->' means "then do this"
                              // 'head + sum(tail)' is the recursive call which continues the adding process
                                | head::tail -> head + sum(tail)
                              // when the list is empty, return 0 and walk back up the call stack
                                | [] -> 0
                               
                              printf "sum = %i" (sum [1; 2; 3])

                              :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

                              L B 2 Replies Last reply
                              0
                              • S soap brain

                                :-O:-O:-O:-O:-O:-O:-O:-O:-O:-O:-O:-O:-O:-O I'm not sure if it's possible to blush or be embarrassed to death, but I shall try! Uh, ahem! Anyway...pretending that was never uttered by me...:~ Umm....you've really...struck me dumb. I'm quite literally speechless. Not a word, a sentiment, an opinion, or even a sardonic quip. :cool: But no, I won't do anything like that. I promise. :rose:

                                Mmmbop, ba duba dop Ba du bop, ba duba dop Ba du bop, ba duba dop Ba du, yeah Mmmbop, ba duba dop Ba du bop, Ba du dop Ba du bop, Ba du dop Ba du, yeah

                                J Offline
                                J Offline
                                Justin Perez
                                wrote on last edited by
                                #29

                                Ravel H. Joyce wrote:

                                But no, I won't do anything like that. I promise.

                                Ok good. Like I said you are a very smart kid, and drugs would only ruin your hopes, dreams, and your desire to be a good, honest person. It will kill your zest for life! You really should remove that Hansen song from your signature though, and stop listenting to that crap. That will also ruin your life!:laugh::laugh::laugh::cool:

                                I get all the news I need from the weather report - Paul Simon (from "The Only Living Boy in New York")

                                S 1 Reply Last reply
                                0
                                • J Josh Smith

                                  I've been studying F# a lot recently and find it really mind-bending.  Tomas Petricek, a fellow CPian, let me sneak preview his series of F# articles and they are very good.  I took one of his examples and modified it a bit.  The following code displays "sum = 6", but how that happens is other-worldly...check it out:

                                  #light

                                  let rec sum nums =
                                    match nums with
                                    | head::tail -> head + sum(tail)
                                    | [] -> 0
                                   
                                  printf "sum = %i" (sum [1; 2; 3])

                                  Weird, eh?   F# is coooool. :cool:

                                  :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

                                  E Offline
                                  E Offline
                                  El Corazon
                                  wrote on last edited by
                                  #30

                                  I have a flute that plays in F#, but the best sound comes from the low C.

                                  _________________________ Asu no koto o ieba, tenjo de nezumi ga warau. Talk about things of tomorrow and the mice in the ceiling laugh. (Japanese Proverb)

                                  1 Reply Last reply
                                  0
                                  • J Josh Smith

                                    // Use the "lightweight" syntax, meaning whitespace has meaning now.
                                    #light

                                    // 'rec' means the function is recursive
                                    // 'sum' is the function name
                                    // 'nums' is the list of int which is passed in
                                    let rec sum nums =
                                    // 'match' indicates that we're going to perform some pattern matching on the values in 'nums'
                                      match nums with
                                    // 'head::tail' means "if it exists, remove the first item in the list
                                    // '->' means "then do this"
                                    // 'head + sum(tail)' is the recursive call which continues the adding process
                                      | head::tail -> head + sum(tail)
                                    // when the list is empty, return 0 and walk back up the call stack
                                      | [] -> 0
                                     
                                    printf "sum = %i" (sum [1; 2; 3])

                                    :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

                                    L Offline
                                    L Offline
                                    leppie
                                    wrote on last edited by
                                    #31

                                    Josh Smith wrote:

                                    'head::tail' means "if it exists, remove the first item in the list

                                    Wouldnt that just destructure your input list into 'head' and 'tail' variable? Perhaps the '::' has special meaning? :confused:

                                    xacc.ide
                                    The rule of three: "The first time you notice something that might repeat, don't generalize it. The second time the situation occurs, develop in a similar fashion -- possibly even copy/paste -- but don't generalize yet. On the third time, look to generalize the approach."

                                    J S 2 Replies Last reply
                                    0
                                    • R Rama Krishna Vavilala

                                      Not very different than prolog or scheme (my favorite language). Prolog:

                                      sum([X | Y], Z) :- sum(Y, A), Z is A + X.
                                      sum([], 0).

                                      Scheme:

                                      (define sum (lambda (x)
                                      (if (null? x) 0 (+ (car x) (sum (cdr x))))))

                                      Co-Author ASP.NET AJAX in Action

                                      L Offline
                                      L Offline
                                      leppie
                                      wrote on last edited by
                                      #32

                                      Rama Krishna Vavilala wrote:

                                      scheme (my favorite language)

                                      Look out for IronScheme then coming soon (it was called IronLisp, but I rewrote it due to fundamental flaws and optimistic design). Will be on Codeplex, I have to make the project 'public' by 10 Nov, so look out for it :)

                                      xacc.ide
                                      The rule of three: "The first time you notice something that might repeat, don't generalize it. The second time the situation occurs, develop in a similar fashion -- possibly even copy/paste -- but don't generalize yet. On the third time, look to generalize the approach."

                                      1 Reply Last reply
                                      0
                                      • J Josh Smith

                                        // Use the "lightweight" syntax, meaning whitespace has meaning now.
                                        #light

                                        // 'rec' means the function is recursive
                                        // 'sum' is the function name
                                        // 'nums' is the list of int which is passed in
                                        let rec sum nums =
                                        // 'match' indicates that we're going to perform some pattern matching on the values in 'nums'
                                          match nums with
                                        // 'head::tail' means "if it exists, remove the first item in the list
                                        // '->' means "then do this"
                                        // 'head + sum(tail)' is the recursive call which continues the adding process
                                          | head::tail -> head + sum(tail)
                                        // when the list is empty, return 0 and walk back up the call stack
                                          | [] -> 0
                                         
                                        printf "sum = %i" (sum [1; 2; 3])

                                        :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

                                        B Offline
                                        B Offline
                                        Brady Kelly
                                        wrote on last edited by
                                        #33

                                        Would you believe I actually knew what let rec sums meant! And the recursive call, but I need to do some reading on the matching and removing the head.

                                        1 Reply Last reply
                                        0
                                        • J Josh Smith

                                          Steve Echols wrote:

                                          Whoa!

                                          My sentiments exactly!  The hardest part about learning F#, for me, is the fact that it has both new syntax and new concepts (well, new for me anyways).  I must say, though, that I haven't had this much geeky fun in a long time!  There's nothing better than freeing your mind a little bit, and thinking about things from a totally different perspective. :-D

                                          :josh: My WPF Blog[^] Without a strive for perfection I would be terribly bored.

                                          Steve EcholsS Offline
                                          Steve EcholsS Offline
                                          Steve Echols
                                          wrote on last edited by
                                          #34

                                          Actually, looking at your example a little closer and figuring out the syntax, that does look pretty damn cool!


                                          - S 50 cups of coffee and you know it's on!

                                          • S
                                            50 cups of coffee and you know it's on!
                                            Code, follow, or get out of the way.
                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups