gpt4 book ai didi

forth - 如何访问 Forth 中的阴影定义?

转载 作者:行者123 更新时间:2023-12-04 14:49:20 25 4
gpt4 key购买 nike

当一个词被重新定义时,是否可以访问旧词?
想象有一个词foo定义和重新定义

: foo ( n -- 2*n ) 2* ;  ok
: foo ( n -- 2*n+1 ) foo 1+ ; redefined foo ok
10 foo . 21 ok
foo这里执行了两个定义。
是否可以执行第一个定义(“second-foo”)?
21 second-foo . 42 ok
see它?
see second-foo
: foo
2* ; ok

最佳答案

访问影子定义的一种简单方法是在创建具有相同名称的新定义之前为定义创建同义词。

synonym old-foo foo
: foo ... ;
另一种方法是使用自省(introspection)工具,即词 traverse-wordlist .使用这个词我们可以定义一个词 find-name-nth-in类似于标准化词 find-name-in ( c-addr u wid -- nt|0 ) ,但它会找到第 n 个阴影词,如下所示:
: find-name-nth-in ( c-addr1 u1 u wid -- nt|0 )
>r 1+
[: ( sd u nt -- sd u true | sd nt 0 false )
2>r 2dup r@ name>string compare if rdrop r> true exit then
r> r> 1- dup if nip then dup 0<>
;] r> traverse-wordlist ( sd u | sd nt 0 )
if 2drop 0 exit then nip nip
;
find-name-nth-in word 为给定单词列表中具有给定名称的单词返回一个 nt,并且 之后在单词列表中定义了完全相同的 u 个单词(区分大小写) , 否则为 0。
一个测试用例:
: ?name ( nt|0 -- nt ) dup 0= -13 and throw ;

: foo ." old" ;
: foo ." new" ;

"foo" 0 forth-wordlist find-name-nth-in ?name name>interpret execute
\ prints "new"

"foo" 1 forth-wordlist find-name-nth-in ?name name>interpret execute
\ prints "old"

在 Gforth 这个词 xt-see 可以用作:
"foo" 1 forth-wordlist find-name-nth-in ?name name>interpret xt-see

关于forth - 如何访问 Forth 中的阴影定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69312047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com