help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Help-octave Digest, Vol 111, Issue 27


From: Maynard Wright
Subject: Re: Help-octave Digest, Vol 111, Issue 27
Date: Wed, 10 Jun 2015 06:36:46 -0700
User-agent: KMail/1.13.5 (Linux/2.6.35-22-generic; KDE/4.5.5; i686; ; )

On Wednesday, June 10, 2015 06:06:48 am Dave Cottingham wrote:
> > ---------- Forwarded message ----------
> > From: Vic Norton <address@hidden>
> > To: help-octave Octave <address@hidden>
> > Cc:
> > Date: Wed, 10 Jun 2015 07:03:03 -0400
> > Subject: Re: a try-if construction
> > 
> > On Jun 9, 2015, at 5:32 PM, Vic Norton <address@hidden> wrote:
> > > The perl code
> > > 
> > >   my @K= qw( 1   30   48 );
> > >   my $n = 109;
> > >   my ($k0, $k1);
> > >   my $i = 0;
> > >   for (my $i = 0; $i < @K; $i++) {
> > >   
> > >     $k0 = $K[$i];
> > >     unless ($k1 = $K[$i + 1]) { $k1 = $n }
> > >     printf("i = %d, k0 = %d, k1 = %d\n", $i + 1, $k0, $k1);
> > >   
> > >   }
> > > 
> > > and the octave code
> > > 
> > >   K = [ 1   30   48 ];
> > >   n = 109;
> > >   for i = 1 : length(K)
> > >   
> > >     k0 = K(i);
> > >     try k1 = K(i + 1); end
> > >     if k1 == k0; k1 = n; endif
> > >     printf("i = %d, k0 = %d, k1 = %d\n", i, k0, k1);
> > >   
> > >   endfor
> > > 
> > > produce exactly the same results:
> > >   i = 1, k0 = 1, k1 = 30
> > >   i = 2, k0 = 30, k1 = 48
> > >   i = 3, k0 = 48, k1 = 109
> > > 
> > > I am very comfortable with the "unless" line in perl. I am much less
> > 
> > comfortable with the "try-if" lines in octave. Is this "try-if
> > construction the best way to do what I want to do?
> > 
> > On Jun 10, 2015, at 3:53 AM, JokerOne <
> > 
> > address@hidden> wrote:
> > > Hi Vic,
> > > 
> > > to be honest, I do not fully understand what you actually want to do?
> > > 
> > > For the output you got, maybe something like that is more
> > 
> > straightforward?
> > 
> > >   K = [ 1   30   48 ];
> > >   n = 109;
> > >   K_helper = [K,n]; % "attach" n to K
> > >   
> > >   for i = 1 : (length(K_helper)-1)
> > >   
> > >       k0 = K_helper(i);
> > >       k1 = K_helper(i+1);
> > >       printf("i = %d, k0 = %d, k1 = %d\n", i, k0, k1);
> > >   
> > >   endfor
> > 
> > I guess I wasn't very clear. Suppose you have a list of "actions" you
> > want to take and a default action in case one or more of the actions is
> > impossible. In Perl you simply run through the list, taking the default
> > action UNLESS you CAN take the listed action.
> > 
> > How do I do the same thing in Octave? I want to TRY each action and, if I
> > CAN'T take it, take the default. The Perl mechanism is extremely simple
> > and logical. Is there a simple and logical Octave mechanism to implement
> > this process?
> > 
> > Now I think I've answered my question. The following TRY-IF Octave
> > construction seems to duplicate the Perl mechanism.
> > 
> >    K = [ 1   30   48 ];
> >    n = 109;
> >    for i = 1 : length(K)
> >    
> >      k0 = K(i);
> >      k1 = n;                     % take the default action
> >      try k1 = K(i + 1); end      % unless the action works
> >      printf("i = %d, k0 = %d, k1 = %d\n", i, k0, k1);
> >    
> >    endfor
> > 
> > with the output
> > 
> >    i = 1, k0 = 1, k1 = 30
> >    i = 2, k0 = 30, k1 = 48
> >    i = 3, k0 = 48, k1 = 109
> 
> I think what you have in mind could be done by including the "catch" clause
> of the try-catch statement.
> 
> try
>   ... some statements here, if they hit an error then ...
> catch
>   ... these statements get executed ...
> end_try_catch
> 
> Not sure what the intent of that Perl construction is, but octave's
> try-catch is aimed at exception handling. Still, it does what you want (if
> I understand what you want).
> 
>  - Dave Cottingham


Maybe the switch statement with cases and a default to "otherwise" would work 
for you.  I've not used it in Octave, but used it to good effect in C some 
decades ago.

Maynard Wright




reply via email to

[Prev in Thread] Current Thread [Next in Thread]