In the mean time I noticed this possibility for initializing with pred:
amb=: 3 : 0
i_amb_=.1+i_amb_
if. istop_amb_<:i_amb_ do. '' else. i_amb_{ambs_amb_ end.
:
". x
ambs_amb_=. (#~p"1) ,/>"1,.{"0 1&(,.>y)&.> ,[EMAIL PROTECTED]&.> y
i_amb_=._1
istop_amb_=. #ambs_amb_
LF
)
'p=.1&p:@({:@>@{. + {.@>@{:)' amb 1 3 5 8;20 35 110
amb''
3 20
amb''
3 110
amb''
8 35
=@@i
Arie Groeneveld schreef:
> After reading some literature about subject I can only conclude
> solutions like the Haskell example are not really what Amb should do. It
> just produces all possibilities at once.
>
> Check out ref. http://tinyurl.com/6g9uzc
> See also some discussion in the RC article:
> http://www.rosettacode.org/wiki/Talk:Amb
>
>
> Here's my try for the J example:
>
> initializer/generator:
>
> amb=: 3 : 0
> i_amb_=.1+i_amb_
> if. istop_amb_<:i_amb_ do. '' return. end.
> i_amb_{ambs_amb_
> :
> ambs_amb_=. (#~pred"1) ,/>"1,.{"0 1&(,.>y)&.> ,[EMAIL PROTECTED]&.> y
> i_amb_=._1
> istop_amb_=. #ambs_amb_
> LF
> )
> * Leaving out LF gives an indication if there will be any output :-)
>
>
> (modified) Rosetta Codes example input:
>
> z1 =: < ;._1 ' the that a'
> z2 =: < ;._1 ' frog elephant thing'
> z3 =: < ;._1 ' walked treaded grows'
> z4 =: < ;._1 ' dumbly slowly quickly'
>
> example run:
>
> condition:
>
> pred=: *./@(2 ({:@>@{. = {.@>@{:) \])
>
> wake up:
>
> 0 amb z1;z2;z3;<z4
>
>
> interrogation:
>
> amb''
> +---+--------+-------+------+
> |the|elephant|treaded|dumbly|
> +---+--------+-------+------+
> amb''
> +----+-----+-----+------+
> |that|thing|grows|slowly|
> +----+-----+-----+------+
> amb''
>
>
> Empty reply on the last interrogation.
>
> Straightforward solution producing all solutions at once is e.g.
>
> joins=: {:@>@{. = {.@>@{:
>
> (#~*./@(2 joins \])"1),/z1,."0 _ ,/z2 ,."0 _ ,/z3 ,."0 _ z4
> +----+--------+-------+------+
> |the |elephant|treaded|dumbly|
> +----+--------+-------+------+
> |that|thing |grows |slowly|
> +----+--------+-------+------+
>
>
> Another example: values summing to a prime (taken from ref.)
>
> pred=: 1&p:@({:@>@{. + {.@>@{:)
> 0 amb 1 3 5 8;20 35 110
>
>
> amb''
> 3 20
> amb''
> 3 110
> amb''
> 8 35
> amb''
>
>
>
> Any comments?
> e.g. it would be nice initializing incl. pred
>
>
> =@@i
>
>
>
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
>
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm