I guess one question is: does the mechanism understand J token formation?

For example, can you determine if it understands the difference
between +/ .* and +/.* ?

If so, can it recognize that + /. * is the same as +/.* ?

And, if so, does it recognize that {{ and { { are different while [[
and [ [ are the same?

These word formation issues could give rather strong hints about its
ability (or limitations on ability) to "reason about" programs.

Thanks,

-- 
Raul


On Mon, May 8, 2023 at 3:34 PM Thomas McGuire <tmcguir...@gmail.com> wrote:
>
> Forgive me for keeping my own thread alive.
>
> This article at Hackernoon put together a comparison of Coding AI bots using 
> Leetcode questions as the stem:
> https://hackernoon.com/how-ai-bots-code-comparing-bing-claude-co-pilot-gpt-4-and-bard
> How AI Bots Code: Comparing Bing, Claude+, Co-Pilot, GPT-4 and Bard
> hackernoon.com
>
> Co-pilot was the easiest one for me to access so that’s why I chose it.
>
> So following hackernoon’s lead here are the results on Leetcode question 214:
>
> STEM:
> NB. find the shortest palindrome for a string by adding letters to the front 
> of it
> shortpal =: 3 : 0
>
> Copilot code:
> NB. find the shortest palindrome for a string by adding letters to the front 
> of it
> shortpal =: 3 : 0
>   's'=.y
>   n=. #s
>   for_i. n do.
>     if. (s i.~ |. s) = s do.
>       return. s
>     end.
>     s=. (i{a.) , s
>   end.
> )
>
> Now the copilot code doesn’t work but the structure of this very un-J-like 
> code is workable. I made some changes and got it working:
> Copilot code fixed to work:
> shortpal1 =: 3 : 0
>   's'=.y
>   n=. #s
>   for_i. s do.
>     if. s -: |. s do.
>       return. s
>     end.
>     s=. (|.(_1-i_index){.s) , y
>   end.
> )
>
> the changes were
> - fixed the palindrome test to exit the function.
> - fixed the building of the palindrome alway starting from the original 
> string, catenating the reverse of the next increment of letters from the end 
> of the string.
>
>
>
> My J way of handling this problem is as follows:
> NB. fpal - filter for palindromes, return the palindrome else return
> NB.        empty atom if not a palindrome
> fpal=: 0&$`]@.(] -: |.)
>
> NB. mkpalindrome - make palindrome by catenating reversed suffixes
> NB.                filter out the palindromes, remove empty boxed
> NB.                elements. Then get the shortest one created which
> NB.                is the tail of the boxed list. unbox the answer
> mkpalindrome =: {{>@{:@-.&(<'') <@fpal@(,&y)@|.\.y}}
>
> Running this on the leetcode simple examples:
>    mkpalindrome 'abcd'
> dcbabcd
>    mkpalindrome 'aacecaaa'
> aaacecaaa
>
> Interestingly, in my previous email ,Copilot was able to discern the fork for 
> average. In the palindrome case the fairly well known fork for palindrome 
> testing was not discovered by Copilot.  Yet when I was developing my 
> 'improved 'J example. I happened to type the following:
> NB. test if string is a palindrome
>
> Copilot responded:
> pal =: 3 : 0
>   s=.y
>   s -: |. s
> )
>
> This is close to the fork implementation.
>
> I won’t post the code, but by using the {{}} method of function calls Copilot 
> produced a child like attempt at a J one liner. When I used an open paren ‘(' 
> to see if I could force a fork implementation it again gave a child like 
> response for a J fork. Neither of the answers were working code.
>
> Copilot is supposed to be pair programming with an AI bot. The github site 
> indicates that in Python about 40% of the Copilot suggested Python code gets 
> used. In other languages it is about 20%-25%.  In my limited use, I find 
> that, rather than peers. I am the Senior programmer and Copilot is the High 
> School intern just learning J. Still it’s a fun toy to play with when your 
> programming.
>
> The major question at this point is will these AI bots ever write good J code 
> (or any array language code for that matter) or is the terseness of an array 
> language too abstracted for AI to become proficient in it?
>
>
> > On May 5, 2023, at 12:07 AM, Thomas McGuire <tmcguir...@gmail.com> wrote:
> >
> > GitHub Copilot works under Visual Studio Code
> >
> > GitHub user tikkanz published an extension for VS Code to edit and run J. 
> > Fairly easy to install.
> >
> > VSCode then needs to have the Copilot extensions installed. It will ask you 
> > to login into your account and then you are all set.
> >
> > I typed in the following into a new .ijs file:
> > NB. average list of numbers in language-j
> > ave =:
> >
> > copilot then finished the line with and offered an example run of the 
> > function, so after I pressed the tab key I had the following:
> > NB. average list of numbers in language-j
> > ave =: +/ % #
> >    ave 1 2 3 4 5
> >
> > Now I know the fork for average is in about 20 different electronic 
> > documents. Still I was surprised that Copilot worked for J at all and more 
> > surprised that it picked up the fork paradigm from the language. I was 
> > expecting more of a functional approach such as:
> > ave1 =: 3 : 0
> > (+/ y) % #y
> > )
> >
> > It costs 100 bucks per year unless you are a student or educator (then it’s 
> > free). I don’t actively program for a living so I don’t know how many 
> > developers are actively using AI tools for coding. But from a beginner 
> > perspective having a tool that produces relatively good J code with a 
> > prompt and a function header would be a great way to come up to speed in 
> > the language in a short period of time.
> >
> > Is it enough just to have J code examples on GitHub or is there a more 
> > direct way to curate the AI tool so that it produces better J code?
> >
> > Throwing it out there to see if anyone else has played with this.
> >
> > Tom McGuire
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to