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