Training the AI to write better LiveCode
Torsten Holmer
torsten.holmer at web.de
Tue Jan 17 01:26:40 EST 2023
I also used chatGPT for looking uo code and I repeated your question. But this time chatGPT gives a wrong answer!
—chatGPT:
You will need to specify the group that the button should be added to by setting the group property of the button. The syntax for this is as follows:
set the group of button [name of button] to [name of group]
For example, if you wanted to create a button called "myButton" and add it to a group called "myGroup", you would use the following script:
create button "myButton“
set the group of button "myButton" to "myGroup"
create button "myButton“
set the group of button "myButton" to „myGroup"
---
It is an error because group is not a property of a button!
So, really be careful with copy&paste programming ;-)
Cheers
Torsten
> Am 14.01.2023 um 22:14 schrieb Kaveh via use-livecode <use-livecode at lists.runrev.com>:
>
> 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
More information about the use-livecode
mailing list