Mailing List Archive: 49091 messages

## [REBOL] Re: Find/deep

### From: ryan:christiansen:intellisol at: 20-Apr-2001 16:17

```
I learn something every day! :)

I, too, was trying to solve this problem and did not realize you could call
a function from within the function itself. Nice. My solution was similar,
but only recursive to three levels. Here is my clunky solution, including
debug output to the console.

find-deep: func [a x][
foreach b a [
print rejoin [{b is } b]
either all [(block? b) ((length? b) > 1)][
foreach c b [
print rejoin [{c is } c]
either all [(block? c) ((length? c) > 1)][
foreach d c [
print rejoin [{d is } d]
if find d x [print rejoin [{found } x { in } d]]
]
][
if find c x [print rejoin [{found } x { in } c]]
]
]
][
if find b x [print rejoin [{found } x { in } b]]
]
]
]

Once again I realize I should have taken some mathematics and programming
classes at the college level. :)

-Ryan

bill wrote:

> Hi all,
>     I was wondering if anyone has a function that will do a find/deep
> on arrays.
>  arrays such as [["AA"] [["B"]["C"]] ["DD"]].
> Bill.
>

Once again I dig into my chainsaw collection.  While not as multipurpose
as 'find, this sucker will tell you if its in there.

deep-find: func [
"Searches for a particular element in a block, recursing sub-blocks."
haystack [block!] "Block to search."
needle [any-type!] "Element to search for."
][
foreach thing haystack [
if thing = needle [ return true] ; Ouch!
if all [ block? thing deep-find thing needle ] [ return true] ; Found
it deep!
]
return false ; Not here!
]

Ryan C. Christiansen
Web Developer

Intellisol International
4733 Amber Valley Parkway
Fargo, ND 58104
701-235-3390 ext. 6671
FAX: 701-235-9940
http://www.intellisol.com

Global Leader in People Performance Software

_____________________________________

Confidentiality Notice
This message may contain privileged and confidential information. If you
think, for any reason, that this message may have been addressed to you in
error, you must not disseminate, copy or take any action in reliance on it,
and we would ask you to notify us immediately by return email to
[ryan--christiansen--intellisol--com]
```