Is syntax a dead issue?
Jacques Clavel
jacques.clavel at gmail.com
Mon Jul 25 03:06:52 EDT 2022
just curious : what about using LCB for the repeat loop ?
jc
Le lun. 25 juil. 2022 à 08:44, Geoff Canyon via use-livecode <
use-livecode at lists.runrev.com> a écrit :
> As a meta point, I wrote a version closer to the actual requirements --
> lowercase everything, process an external input line by line to allow for
> arbitrary input size. The result is about 8-10x slower than most other
> languages -- not as bad as I feared, not as good as I hoped. Here's the
> code for that version:
>
> on mouseUp
> answer file "choose input:"
> if it is empty then exit mouseUp
> put it into F
> lock screen
> put the long seconds into T
> open file F for read
> repeat
> read from file F for 1 line
> repeat for each word w in toLower(it)
> add 1 to R[w]
> end repeat
> if the result is not empty then exit repeat
> end repeat
> combine R using cr and tab
> sort R numeric descending by word 2 of each
> put the long seconds - T into T1
> put R into fld "output"
> put the long seconds - T into T2
> put T1 && T2
> close file F
> end mouseUp
>
> On Sun, Jul 24, 2022 at 11:01 PM Geoff Canyon <gcanyon at gmail.com> wrote:
>
> > On this Hacker News thread <
> https://news.ycombinator.com/item?id=32214419>,
> > I read this programming interview question
> > <https://benhoyt.com/writings/count-words/>. Roughly, the challenge is
> to
> > count the frequency of words in input, and return a list with counts,
> > sorted from most to least frequent. So input like this:
> >
> > The foo the foo the
> > defenestration the
> >
> > would produce output like this:
> >
> > the 4
> > foo 2
> > defenestration 1
> >
> > Of course I smiled because LC is literally built for this problem. I took
> > well under two minutes to write this function:
> >
> > function wordCount X
> > repeat for each word w in X
> > add 1 to R[w]
> > end repeat
> > combine R using cr and tab
> > sort R numeric descending by word 2 of each
> > return R
> > end wordCount
> >
> > There are quibbles -- the examples given in the article work line by
> line,
> > so input size isn't an issue, and of course quotes would cause an issue,
> > and LC is case insensitive, so it works, but the output would look like
> > this:
> >
> > The 4
> > foo 2
> > defenestration 1
> >
> > But generally, it works, and is super-easy to code. But for the sake of
> > argument, consider this Python solution given:
> >
> > counts = collections.Counter()
> > for line in sys.stdin:
> > words = line.lower().split()
> > counts.update(words)
> >
> > for word, count in counts.most_common():
> > print(word, count)
> >
> > That requires a library, but it's also super-easy to code and understand,
> > and it requires just the same number of lines. So, daydreaming extensions
> > to LC syntax, this comes to mind:
> >
> > function wordCount X
> > add 1 to R[w] for each word w in X
> > return R combined using cr and tab and sorted numeric descending by
> > word 2 of each
> > end wordCount
> >
> > or if you prefer:
> >
> > function wordCount X
> > for each word w in X add 1 to R[w]
> > return (R combined using cr and tab) sorted numeric descending by word
> > 2 of each
> > end wordCount
> >
> > Or to really apply ourselves:
> >
> > function wordCount X
> > return the count of each word in X using cr and tab sorted numeric
> > descending by word 2 of each
> > end wordCount
> >
> > So: the xTalk syntax is over thirty years old; when was the last
> > significant syntax update?
> >
> > (I'm not at all core to the process, so feel free to tell me how much
> I've
> > missed lately!)
> >
> >
> _______________________________________________
> 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
>
--
Jacques Clavel
More information about the use-livecode
mailing list