Training the AI to write better LiveCode

Mark Smith marksmithhfx at gmail.com
Sat Jan 14 15:08:03 EST 2023


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 at 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 at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode



More information about the use-livecode mailing list