Hi Joe,

> (be add1-or-double (@X @Num)
>   (member @X (1 2 3 4))
>   (@Ans + 1 (-> @X))
>   (@Ans2 * 2 (-> @X))
>   (or ((equal @Num @Ans)) ((equal @Num @Ans2))))
> 
> (? (add1-or-double @X 4))
> @X=2 @X=3:

OK


> If I try this:
> 
> (be add1-or-double (@X @Num)
>   # (member @X (1 2 3 4))
>   (@X range 1 100)

'range/3' is a predicate, not a generator. You can use it only for
range checks like:

   : (? (range (1 . 5) 3))
   -> T
   : (? (range (1 . 5) 7))
   -> NIL

Its main purpose is for database queries, to be used as a filter for
numeric or date values.


Instead, you might consider using 'for/2'

   (be add1-or-double (@X @Num)
     (for @X 4)
     (@Ans + 1 (-> @X))
     (@Ans2 * 2 (-> @X))
     (or ((equal @Num @Ans)) ((equal @Num @Ans2))) )


To generate an unlimited supply of numbers, you could write

   (be number (@N)
      (@C box 0)
      (repeat)
      (@N inc (-> @C)) )

   (be add1-or-double (@X @Num)
     (number @X)
     (@Ans + 1 (-> @X))
     (@Ans2 * 2 (-> @X))
     (or ((equal @Num @Ans)) ((equal @Num @Ans2))) )

Note, however, that this won't terminate.

♪♫
- Alex
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to