Training the AI to write better LiveCode
Mike Kerner
MikeKerner at roadrunner.com
Sun Jan 15 17:41:20 EST 2023
this is feeling like it could/should become a test suite: questions posed,
and the quality of the solution
On Sat, Jan 14, 2023 at 4:16 PM Kaveh via use-livecode <
use-livecode at lists.runrev.com> wrote:
> 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*
> _______________________________________________
> 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
>
--
On the first day, God created the heavens and the Earth
On the second day, God created the oceans.
On the third day, God put the animals on hold for a few hours,
and did a little diving.
And God said, "This is good."
More information about the use-livecode
mailing list