Hi T Brownell

you wrote:
>x: none
>cat: "feline" 
>cat: "kitty"
>fact: "I have a kitty"
>if found? find fact cat [x: "found it"]
>if found? x [print x]
>unset 'x

A few remarks:

>x: none
this line is not necessary. But it's not a bad idea.

>cat: "feline" 
>cat: "kitty"

Now cat evaluates to "kitty" only! cat no longer evaluates to "feline"! If
you try this code against fact: "I have a feline" find will fail! 

Given:
>cat: "feline" 
>cat: "kitty"
>fact: "I have a kitty"

you could say:
if found? find fact cat [print x: "found it"]

>How can i make the 2 values of cat: into a pattern
>that can be used in this script?  Also, the rest of
>this script stinks... THERE MUST BE A BETTER WAY!!!

fact: "I have a kitty"

rule:    [ 
           [thru "kitty" (x: "found kitty")] |
           [thru "feline" (x: "found feline") ] 
           to end 
         ]


>> if parse fact rule [print x]
found kitty

fact: "I have a feline"

>> if parse fact rule [print x]
found feline

To identify both in any order:

fact-1: "The feline I have is a kitty."
fact-2: "I have a kitty which is a feline"

one possible approach is:


rule:    [ 
           marker: [thru "kitty" (x-kitty: "found kitty")] 
           :marker [thru "feline" (x-feline: "found feline") ] 
           to end 
         ]


unset 'x-feline
unset 'x-kitty

if parse fact-1 rule [
  if value? 'x-feline [print x-feline]
  if value? 'x-kitty  [print x-kitty]
]

unset 'x-feline
unset 'x-kitty

if parse fact-2 rule [
  if value? 'x-feline [print x-feline]
  if value? 'x-kitty  [print x-kitty]
]

>> unset 'x-feline
>> unset 'x-kitty
>>
>> if parse fact-1 rule [
[      if value? 'x-feline [print x-feline]
[      if value? 'x-kitty  [print x-kitty]
[    ]
found feline
found kitty
>>
>> unset 'x-feline
>> unset 'x-kitty
>>
>> if parse fact-2 rule [
[      if value? 'x-feline [print x-feline]
[      if value? 'x-kitty  [print x-kitty]
[    ]
found feline
found kitty

Hope this helps.


;- Elan >> [: - )]

Reply via email to