MskHUG'09
Получился.
Ура!
Всем не пришедшим - выговор с занесением. ;)
Ура!
Всем не пришедшим - выговор с занесением. ;)
By logging in to LiveJournal using a third-party service you accept LiveJournal's User agreement
: OVER ( a b -- a b a ) ... ;В скобочках-комментариях стоит стековый эффект: слева от тире (--) ожидаемый стек, точнее, наиболее доступные элементы, справа - наиболее доступные элементы после выполнения функции. Получается своего рода сравнение с образцом: если применим образец слева, то можно выполнять и будет применим образец справа.
: OVER ( α a b -- α a b a ) ... ;α - это неизменная для обеих образцов часть стека. Теперь соответствие со сравнением с образцом полное, причем сравниваем мы со списком: (a:as) и (&alpha a) отличаются только порядком хвоста и головы.
EXEC ( xt -- )
. Он ничего не говорит о стековом эффекте xt.: EXEC ( α ( &alpha -- %beta; ) -- β )Греческие буквы - части стека. Мы принимаем на вход какой-то образец стека α плюс умеющий с ним обращаться xt типа
( &alpha -- %beta;)
. На выходе получим другой образец стека.EXEC EXEC
.: CHECK-NON-ZERO ( int -- int TRUE ) ( int -- FALSE ) DUP 0 /= \ a a/=0 DUP NOT \ a a/=0 a==0 IF SWAP DROP THEN \ желаемый эффект ;Что-то мне напоминает. ;)