Of course, that part's easy.  

           ntt =: verb def '5!:5{.;:''y'''  NB.  Noun To Text
        
           ntt;._2 noun define -.TAB
                a. i. '(`'3
                a. i. '(`'3'
                'open 'quote
        )
        'a. i. ''(`''3'  
        'a. i. ''(`''3'''
        '''open ''quote'

But it goes back to the original questions:
        1.  What is the source of these strings?  
            _Where_ is your user typing them in?

        2.  What is processing these strings?

If the answer to #1 is a file, or a GUI (e.g. wd, web interface, etc) or
anywhere other than immex mode, the answer is easy.  But I'm getting the
sense that the very reason you want to quote these strings is so that J can
process them in immex mode.  You don't need them quoted for your own
purposes.

That is, you're trying to give your user access to the power of J (because
it's so close to what your user needs already....) but you feel that
out-of-the-box, J is a little too picky about input.  That is, J is
powerful, but not trivial to learn and use.  So you want something like J,
but simpler, easier.  You want a "Simple J"; an "Easy J".

Is that right?  If so, does it sound familiar?

Anyway, if that is what you're after (the user typing something J-like but
not-quite-J into immex mode), then you need to commandeer the IJX session
manager.  Because, by definition, anything typed into the IJX session
manager has to be a valid J sentence.  But once you take over the REPL, you
can do whatever you like; you can implement your own, J-like language.

        http://www.jsoftware.com/jwiki/RicSherlock/Temp/InteractivePrompt
        (Note in particular the caveats at the bottom of the page)

        http://www.jsoftware.com/jwiki/DanBron/Temp/REPL
        (A similar program)

Which leads me to question #2:  what other things does your language permit,
that J would not, out-of-the-box?  Because, once you solve your quoting
problem, if you're still using ". (i.e., J) to process your strings, you're
going to hit new hurdles.

           i =: 2   NB.  User is typing this stuff in   
           j =: 3
        
           i j { i. 4 5
        |syntax error
        |       i j{i.4 5
        |[-0]

           NB.  ??? I'm a sad, confused user

           +:^:3 2  NB. RE told me about this power operator thing, it
sounds so cool!
        +:^:3 2

           NB.  Darn, it's broken!

Of course, I could be reading too much into your messages, and be totally
off-base about this "J Lite" thing.  If so, can you share the bigger picture
of your use case?  Who is the user, what is he doing, what are his
objectives, what is his interface to your application, etc?

-Dan
                
-----Original Message-----
From: programming-boun...@jsoftware.com
[mailto:programming-boun...@jsoftware.com] On Behalf Of R.E. Boss
Sent: Sunday, February 12, 2012 9:40 AM
To: 'Programming forum'
Subject: Re: [Jprogramming] quote problem

The (input) string should be considered as one group (of chars).
Quoting is needed if the first or the last (or both) is not a quote, all
inside quotes should be doubled if they are not.


R.E. Boss


> -----Oorspronkelijk bericht-----
> Van: programming-boun...@jsoftware.com [mailto:programming-
> boun...@jsoftware.com] Namens Don Guinn
> Verzonden: zondag 12 februari 2012 14:03
> Aan: Programming forum
> Onderwerp: Re: [Jprogramming] quote problem
> 
> Given the string contains several groups of non-blanks, would each group
> need to be surrounded with quotes and quotes within it doubled if not a
> number, or only if it contained one or more quotes? Or should the string
be
> considered as one group? Again, when would quoting be needed?
> 
> On Sun, Feb 12, 2012 at 1:17 AM, R.E. Boss <r.e.b...@planet.nl> wrote:
> 
> > The problem boils down to the fact that J requires a string (of chars)
to
> > be
> > enclosed in (single) quotes and the inside quotes have to be doubled.
> > (Contrary to a spreadsheet (e.g.) where a cell is of type char if it is
not
> > a number.)
> > But what if I don't want bother a user with these requirements, she
enters
> > a
> > string  and my verb does the enclosing and doubling, if necessary?
> >
> >
> > R.E. Boss
> >
> >
> > > -----Oorspronkelijk bericht-----
> > > Van: programming-boun...@jsoftware.com [mailto:programming-
> > > boun...@jsoftware.com] Namens Dan Bron
> > > Verzonden: zaterdag 11 februari 2012 20:35
> > > Aan: J Programming
> > > Onderwerp: Re: [Jprogramming] quote problem
> > >
> > > Oh, just saw Henry's response and he interpreted your question
> > differently.
> > >
> > > If you're not typing these strings in, then what is the source?  And
what
> > is
> > > processing them (is it ;: ? if it's ". there's more to worry about
than
> > proper
> > > quoting).
> > >
> > > Anyway, if the strings are coming from e.g. a file and the trouble is
> > with
> > > parsing them using ;: (instead of evaluating them in the immex
session),
> > then
> > > you could try something along the lines of  (#~ 2 * '''' = ]) y  (i.e.
> > double
> > > singleton quotes).
> > >
> > > -Dan
> > >
> > > Please excuse typos; composed on a handheld device.
> > >
> > > -----Original Message-----
> > > From: Dan Bron <j...@bron.us>
> > > Sender: programming-boun...@jsoftware.com
> > > Date: Sat, 11 Feb 2012 14:05:16
> > > To: Programming forum<programming@jsoftware.com>
> > > Reply-To: Programming forum <programming@jsoftware.com>
> > > Subject: Re: [Jprogramming] quote problem
> > >
> > > Unlike C, where \ introduces an escape sequence within string
liberals,
> > in
> > J,
> > > the only special character in a literal is ' (single quote).
> > >
> > > So, to embed quotes in strings, double them up:   a. i. '(`''3'   .
Of
> > course,
> > > recursively embedded quotes need quadrupling, octupling, etc (eg 'he
> said
> > > ''she said ''''yes'''', but she lied'', if you can believe that').
> > >
> > > The syntax error in your first example is due to the juxtaposition of
two
> > > nouns, the string  '(`'  and the number 3 .
> > >
> > > -Dan
> > >
> > >
> > > On Feb 11, 2012, at 1:04 PM, "R.E. Boss" <r.e.b...@planet.nl> wrote:
> > >
> > > > If I want to process an arbitrary string, I may encounter a string
> > which
> > > > might give a "syntax error" or an "open quote" message.
> > > >
> > > > How can I detect such a situation and how can I repair the given
> > string?
> > > >
> > > >
> > > >
> > > >   a. i. '(`'3
> > > >
> > > > |syntax error
> > > >
> > > > |   a.    i.'(`'3
> > > >
> > > >
> > > >
> > > >   a. i. '(`'3'
> > > >
> > > > |open quote
> > > >
> > > > |      a.i.'(`'3'
> > > >
> > > > |               ^
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > R.E. Boss
> > > >
> > > >
----------------------------------------------------------------------
> > > > For information about J forums see
> > > http://www.jsoftware.com/forums.htm
> > > ----------------------------------------------------------------------
> > > For information about J forums see
> http://www.jsoftware.com/forums.htm
> > > ----------------------------------------------------------------------
> > > For information about J forums see
> http://www.jsoftware.com/forums.htm
> >
> > ----------------------------------------------------------------------
> > For information about J forums see
> http://www.jsoftware.com/forums.htm
> >
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
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