Thanks for posting this Geoff. It’s the first time I've seen a ongoing dialog 
between a programmer and Chat GPT and the first thing I am struck by (but not 
the only thing) is it’s ability to deal with human ambiguity. For example, you 
ask it to modify the code to be an “on mouseUp handler in a button". But 
nowhere in its response is there any sign of a button. It just totally ignored 
that part of your request. The code it provides works in a card, a stack, a 
graphic image, an svg widget, in fact, in anything that accepts mouseUp input. 
And yet, it didn’t worry itself about that. Very interesting. It’s kind of 
like, “this works in a button, so good enough”. That is not the kind of 
“nuance” I am used to expecting from an AI. So, progress has clearly been made 
in interpreting what humans say (or ask) in a very loose way. 

The 2nd, and perhaps more astounding example, is when you ask it to "rewrite 
the code to be a function that takes an argument "n", repeats with 1 to n, and 
returns the results”. 

The really clever bit here is not that it rewrites the previous code into a 
function, but that it removes the bit about "put fizzbin into field “display””. 
How does it know that putting the result in a field is NOT the typical 
responsibility of a function? How does it know that that step needs to occur 
AFTER the function call? That is so high-level that I am sure lots of beginning 
programmers have made that mistake. It even comments on it in the 
documentation. So there is some very deep semantic understanding of programming 
code that is going on here. Because,  you did not ask it to do that, but the 
fact that it did it anyway indicates it clearly understands what the purpose of 
a function is. 

Quite weird for me to comprehend how it knows that. Unless of course, you were 
somehow more specific than your examples illustrate. 

Mark

> On 14 Jan 2023, at 3:22 am, Geoff Canyon via use-livecode 
> <use-livecode@lists.runrev.com> wrote:
> 
> So just now I put this in to chatgpt:
> 
> "fizz bin" is a program that counts from 1 to 100, replacing every number
> divisible by 5 with "fizz" and every number divisible by 7 with "bin"; and
> numbers divisible by both 5 and 7 with "fizz bin". Write code in the
> programming language livecode to execute "fizz bin"
> 
> This is what ChatGPT responded with:
> 
> repeat with x = 1 to 100
>    if x mod 5 = 0 and x mod 7 = 0 then
>        put "fizz bin"
>    else if x mod 5 = 0 then
>        put "fizz"
>    else if x mod 7 = 0 then
>        put "bin"
>    else
>        put x
>    end if
> end repeat
> 
> That works as-is, but obviously the results fly by in the message box. So I
> put a field and a button on a card, and edited to this, and it works
> perfectly:
> 
> on mouseUp
>   repeat with x = 1 to 100
>      if x mod 5 = 0 and x mod 7 = 0 then
>         put "fizz bin" & cr after fld 1
>      else if x mod 5 = 0 then
>         put "fizz" & cr after fld 1
>      else if x mod 7 = 0 then
>         put "bin" & cr after fld 1
>      else
>         put x & cr after fld 1
>      end if
>   end repeat
> end mouseUp
> 
> Then as I was typing this email I realized I was potentially selling
> chatgpt short, so I put this in:
> 
> Modify that code so it works as an "on mouseUp" handler in a button, and
> concatenates the results on individual lines, and puts the final result
> into the field "display"
> 
> And it output this:
> 
> 
> on mouseUp
>   put "" into fizzbin
>   repeat with x = 1 to 100
>      if x mod 5 = 0 and x mod 7 = 0 then
>          put "fizz bin" & return after fizzbin
>      else if x mod 5 = 0 then
>          put "fizz" & return after fizzbin
>      else if x mod 7 = 0 then
>          put "bin" & return after fizzbin
>      else
>          put x & return after fizzbin
>      end if
>   end repeat
>   put fizzbin into field "display"
> end mouseUp
> 
> And it followed that with instructions:
> 
> This code uses the "on mouseUp" handler to execute the script when the
> button is clicked. The results are concatenated and separated by a new line
> using the "& return" operator after each output. The final result is placed
> into a field with the name "display" using the "put" command.
> 
> I'll save you the trouble: that code executes perfectly right out of the
> box, with no errors, and of course even though I didn't ask it to, it uses
> a variable to store the intermediate values, saving the field update for
> the end.
> 
> If I were writing it, I'd probably do something like
> 
> on mouseUp
>   put "" into fizzbin
>   repeat with x = 1 to 100
>      if x mod 5 = 0 then put "fizz " after fizzbin
>      if x mod 7 = 0 then put "bin " after fizzbin
>      if char -1 of fizzbin is space
>          then put return into char -1 of fizzbin
>          else put x & return after fizzbin
>   end repeat
>   put fizzbin into field "display"
> end mouseUp
> 
> That might be a bit faster, but probably not as clear.
> 
> Finally, I gave it the input:
> 
> Now rewrite the code to be a function named "fizzbin" that takes an
> argument "n", repeats with 1 to n, and returns the results.
> 
> function fizzbin n
>   put "" into fizzbin
>   repeat with x = 1 to n
>      if x mod 5 = 0 and x mod 7 = 0 then
>          put "fizz bin" & return after fizzbin
>      else if x mod 5 = 0 then
>          put "fizz" & return after fizzbin
>      else if x mod 7 = 0 then
>          put "bin" & return after fizzbin
>      else
>          put x & return after fizzbin
>      end if
>   end repeat
>   return fizzbin
> end fizzbin
> 
> This works perfectly, and chat gpt also documents its answer:
> 
> This code defines a function named "fizzbin" which takes an argument "n"
> that determines the range of the repeat loop. The function builds the
> result string in a variable "fizzbin" and return the final result. The
> calling script can then use the returned value for further processing or
> for displaying in a field.
> 
> Grammatical issue notwithstanding, that's good documentation.
> _______________________________________________
> use-livecode mailing list
> use-livecode@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to