Skip to content

Instantly share code, notes, and snippets.

@sgoguen
Last active December 1, 2022 18:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sgoguen/79f63ac0e6b4c3709e7c712e62d297af to your computer and use it in GitHub Desktop.
Save sgoguen/79f63ac0e6b4c3709e7c712e62d297af to your computer and use it in GitHub Desktop.
GPT-3.5 Teaching me F#

My First Conversation with GPT-3.5

The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.

Human: Hello, who are you?

AI: I am an AI created by OpenAI. How can I help you today?

Human: Can you help me write an F# tutorial?

AI: Absolutely! I can help you create an F# tutorial that walks through the basics of the language and provides step by step instructions. Would you like some help getting started? Human: How do you do the basics? Can we start with something like a number guessing game? How would you write it?

AI: Sure! For a number guessing game, we can first define the boundaries of the game. We need to determine what the lowest and highest numbers should be. Then, we can write a loop that reads user input and compares it with a randomly generated integer. If the input is equal to the generated integer, the game can end. If not, the user can be prompted to guess again until they guess the right number. Human: What does the F# code look like?

AI: Here is an example of the F# code for a number guessing game:

let minNumber = 0 
let maxNumber = 100 
let randomNumber = System.Random.Next(minNumber,maxNumber) 
let rec loop () =   
    printfn "Guess a number between %d and %d" minNumber maxNumber 
    let userInput = Console.ReadLine() 
    match int userInput with   
    | some num when num = randomNumber -> printfn "You guessed correctly!"   
    | some num when num < randomNumber -> printfn "The number is higher than %d" num; loop ()   
    | some _ -> printfn

Human: That's great! Can you modify is so it tells me if I'm warmer or colder?

AI: Absolutely! Here is an example of how to modify the code to tell you if you are warmer or colder:

let minNumber = 0 
let maxNumber = 100 
let randomNumber = System.Random.Next(minNumber,maxNumber) 
let rec loop () =   
    printfn "Guess a number between %d and %d" minNumber maxNumber 
    let userInput = Console.ReadLine() 
    match int userInput with   
    | some num when num = randomNumber -> printfn "You guessed correctly!"    
    | some num when num < randomNumber -> printfn "The number is higher than %d, you are getting warmer!" num

Human: That doesn't work. You should remember the previous guess and tell the user they're warmer when their guess is closer than the previous answer.

AI: Got it! Here is an example of the modified F# code to tell the user if they are warmer or colder:

AI: Got it! Here is an example of the modified F# code to tell the user if they are warmer or colder: 
let minNumber = 0 
let maxNumber = 100 
let randomNumber = System.Random.Next(minNumber,maxNumber) 
let mutable previousNumber = 0 
let rec loop () =   
    printfn "Guess a number between %d and %d" minNumber maxNumber 
    let userInput = Console.ReadLine() 
    match int userInput with   
    | some num when num = randomNumber -> printfn "You guessed correctly!"    
    | some num when num < randomNumber ->      
        if num >

(Note: I forgot to increase the maximum length of the responses, so the code is abruptly truncated)

Human: That's great! How would you modify the program so previousNumber is not mutable. What's the functional way to do this?

AI: To make the program non-mutable, we can use pattern matching to wrap the user input within a record or in a tuple to store the current and previous numbers. The program can then compare the difference between the two numbers to determine if the user is warmer or colder. Here is an example of the code:

let minNumber = 0 
let maxNumber = 100 
let randomNumber = System.Random.Next(minNumber,maxNumber) 
let rec loop (currentNumber, previousNumber) =   
    printfn "Guess a number between %d and %d" minNumber maxNumber 
    let userInput = Console.ReadLine() 
    match int userInput with   
    | some num when num = randomNumber -> printfn "You guessed correctly!"    
    | some num when num < randomNumber ->     
        let diff = abs (num - randomNumber) 
        let prevDiff = abs (previousNumber - randomNumber) 
        if diff < prevDiff 
            then printfn "The number is higher than %d, you are getting warmer!" num 
        else printfn "The number is higher than %d, you are getting colder!" num 
        loop (num, previousNumber) 
    | some _ -> printfn "Invalid input!"; loop (previousNumber, previousNumber) 
loop (0, 0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment