Training the AI to write better LiveCode

Kaveh kaveh at rivervalleytechnologies.com
Sat Jan 14 16:14:48 EST 2023


I just tried Google to the answer to a problem. Didn't get it first time,
so tried ChatGPT. I asked:

*How do I add a button to a group in LiveCode using a script?*

I got:

*create button "myButton" in group "myGroup"*


*This command creates a new button object with the name "myButton" and
places it inside the group "myGroup".*
Just what I needed.

You can also set properties of the button

On Sat, 14 Jan 2023 at 20:09, Mark Smith via use-livecode <
use-livecode at lists.runrev.com> wrote:

> 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
>
> _______________________________________________
> 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
>


-- 
Kaveh Bazargan PhD
Director
River Valley Technologies <http://rivervalley.io> ● Twitter
<https://twitter.com/rivervalley1000> ● LinkedIn
<https://www.linkedin.com/in/bazargankaveh/> ● ORCID
<https://orcid.org/0000-0002-1414-9098> ● @kaveh1000 at mastodon.social
<https://mastodon.social/@kaveh1000>
*Accelerating the Communication of Research*


More information about the use-livecode mailing list