Until the stack effect of at* changes, I've been using:

: at? ( key assoc -- value/key ? ) 2dup key? [ at* ] [ drop f ] if ;



On Mon, Feb 2, 2009 at 3:37 PM, Doug Coleman <doug.cole...@gmail.com> wrote:
> Steve,
>
> Yes, I thought of this too and discussed it with Slava.  My use case
> was:
>
> ERROR: no-foo key ;
>
> : lookup-foo ( key assoc -- value )
>     at* [ no-foo ] unless ;
>
> You really want the bad key included in the error tuple, and like you
> said, it's tough to do this currently.
>
> Like if* and if-empty for null and empty sequences respectively, you
> could define an if-at combinator that has the desired behavior.
>
> [ no-foo ] unless-at
>
> The disadvantage of doing this is you have to define three new if
> combinators: if-at, when-at, unless-at, and the code is slightly
> harder to read because you have to read all the way to the end to see
> what it's doing.  If at* were as you suggest, you could just use at*
> with if, when, and unless -- no need for new combinators.
>
> So, yes, at* has the wrong stack effect right now, and I hope to
> change it eventually.
>
> Doug
>
>
> On Jan 31, 2009, at 10:50 AM, Steve Weeks wrote:
>
>> Wouldn't it be better if  at* was:
>>
>> : at* ( key assoc -- key/value ? ) ... ;
>>
>> If the key exists then the stack is "value t" otherwise the stack is
>> "key f".  That way you could code something like:
>>
>> key at* [ <do something with the key> ] unless ... ;
>>
>> Right now it returns "f f", the redundant f's aren't that useful and
>> you have to code:
>>
>> key dup at [ <do something with the value> ] [ <do something with the
>> key> ] if ... ;
>>
>> Usually I'm building the object if the key doesn't exist so it would
>> nice if the code was:
>>
>> key at* [ <new-object> ] unless ;
>>
>> Or am I completely missing the idom?
>>
>> ------------------------------------------------------------------------------
>> This SF.net email is sponsored by:
>> SourcForge Community
>> SourceForge wants to tell your story.
>> http://p.sf.net/sfu/sf-spreadtheword
>> _______________________________________________
>> Factor-talk mailing list
>> Factor-talk@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/factor-talk
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by:
> SourcForge Community
> SourceForge wants to tell your story.
> http://p.sf.net/sfu/sf-spreadtheword
> _______________________________________________
> Factor-talk mailing list
> Factor-talk@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/factor-talk
>

------------------------------------------------------------------------------
Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM)
software. With Adobe AIR, Ajax developers can use existing skills and code to
build responsive, highly engaging applications that combine the power of local
resources and data with the reach of the web. Download the Adobe AIR SDK and
Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to