* Re: set subtract
@ 1992-11-04 14:12 rsalz
0 siblings, 0 replies; 5+ 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] 5+ messages in thread
* Re: set subtract
@ 1992-11-04 14:25 malte
0 siblings, 0 replies; 5+ 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] 5+ messages in thread
* Re: set subtract
[not found] <cks@hawkwind.utcs.toronto.edu>
@ 1992-11-04 12:45 ` malte
0 siblings, 0 replies; 5+ messages in thread
From: malte @ 1992-11-04 12:45 UTC (permalink / raw)
To: rc
The problem with a set-subtract function is that it will loose quoting
information if it's used as 'foo `{set-sub ....}', and you thus need to
have it passed variable names to work on. But then you can't just use
this on a command line; you have to build lists beforehand. About
half the time I'd like to use this is on command lines, so I keep
wishing for a better solution.
- cks
Applause, applause!
I'd vote for making such a function built into rc to avoid meta character
trouble, the way the ~ operator does it.
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
;
Malte
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: set subtract
1992-11-03 23:44 Byron Rakitzis
@ 1992-11-04 0:42 ` Chris Siebenmann
0 siblings, 0 replies; 5+ messages in thread
From: Chris Siebenmann @ 1992-11-04 0:42 UTC (permalink / raw)
To: rc
The problem with a set-subtract function is that it will loose quoting
information if it's used as 'foo `{set-sub ....}', and you thus need to
have it passed variable names to work on. But then you can't just use
this on a command line; you have to build lists beforehand. About
half the time I'd like to use this is on command lines, so I keep
wishing for a better solution.
- cks
^ permalink raw reply [flat|nested] 5+ messages in thread
* set subtract
@ 1992-11-03 23:44 Byron Rakitzis
1992-11-04 0:42 ` Chris Siebenmann
0 siblings, 1 reply; 5+ 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] 5+ messages in thread
end of thread, other threads:[~1992-11-04 14:25 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1992-11-04 14:12 set subtract rsalz
-- strict thread matches above, loose matches on Subject: below --
1992-11-04 14:25 malte
[not found] <cks@hawkwind.utcs.toronto.edu>
1992-11-04 12:45 ` malte
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).