rc-list - mailing list for the rc(1) shell
 help / color / mirror / Atom feed
* Re: set subtract
@ 1992-11-04 14:25 malte
  0 siblings, 0 replies; 6+ messages in thread
From: malte @ 1992-11-04 14:25 UTC (permalink / raw)
  To: rc


	Easy; the following just uses built-ins.  Note that it implements
	the example (first arg is a pattern, not a list of patterns); I don't
	believe the synopsis can be done.
	fn index { pat=() i=() result=() count=() {
	    pat=$1
	    shift || { echo 'Usage error' >[1=2] ; return 1 }
	    for (i) {
	        count=(a $count)
	        eval ~ $i $pat && result=($result $#count)
	    }
	    echo $result
	} }

Fine, this is similar to what I do now. Why a built in command ?
Imagine $pat has a value of '$something'. This will break it.

Malte



^ permalink raw reply	[flat|nested] 6+ messages in thread
* Re: set subtract
@ 1992-11-04 14:12 rsalz
  0 siblings, 0 replies; 6+ messages in thread
From: rsalz @ 1992-11-04 14:12 UTC (permalink / raw)
  To: malte, rc

>A related builtin I always wanted to have:
>        idx = `{ index list_of_patterns list_to_search_in }
>This should return a list of indices of the search patterns in the second list.
>        ; echo `{ index a ( a b c a ) }
>        1 4
Easy; the following just uses built-ins.  Note that it implements
the example (first arg is a pattern, not a list of patterns); I don't
believe the synopsis can be done.
fn index { pat=() i=() result=() count=() {
    pat=$1
    shift || { echo 'Usage error' >[1=2] ; return 1 }
    for (i) {
        count=(a $count)
        eval ~ $i $pat && result=($result $#count)
    }
    echo $result
} }


^ permalink raw reply	[flat|nested] 6+ messages in thread
* set subtract
@ 1992-11-03 23:44 Byron Rakitzis
  1992-11-04  0:42 ` Chris Siebenmann
  0 siblings, 1 reply; 6+ messages in thread
From: Byron Rakitzis @ 1992-11-03 23:44 UTC (permalink / raw)
  To: rc

Given two lists a and b, it is possible to do set subtract
in rc with the ~ operator:

	for (i in $a)
		if (!~ $i $b)
			echo $i

So all that you need to do is write a function to build
these two lists based on the

	[a] - [b]

syntax suggested. Something like this:

	fn set-subtract {
		a=()
		while () {
			switch ($1) {
			case ()
				echo usage: $0 'foo - bar' >[1=2]
				return 1
			case -
				shift
				break
			case *
				a=($a $1)
				shift
			}
		}
		for (i in $a)
			if (!~ $i $*)
				echo $i
	}

(Btw, I would choose a shorter name than set-subtract. Sort of reminds
me of the regexp syntax that Nicklaus Wirth uses in his Oberon system.
I think it's straight BNF.  To say .* you have to write it as {~c}. Or
even worse, foo*bar becomes "fo"{"o"}"bar". Does he really use this
tool, or expect anyone else to? But I digress..)


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~1992-11-06 12:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <cks@hawkwind.utcs.toronto.edu>
1992-11-04 12:45 ` set subtract malte
1992-11-06 12:03 ` rc and signal handlers malte
1992-11-04 14:25 set subtract malte
  -- strict thread matches above, loose matches on Subject: below --
1992-11-04 14:12 rsalz
1992-11-03 23:44 Byron Rakitzis
1992-11-04  0:42 ` Chris Siebenmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).