Автор |
Сообщение |
|
|
Заголовок сообщения: |
|
|
|
Если не секрет, для чего нужно так много элементов продублировать?
: 5DUP >R 2OVER R@ -ROT >R 2OVER R> -ROT R> ;
как вариант. Но лучше перепроектировать верхнее слово, так, чтобы этого делать не пришлось.
Просто делается : 4DUP 2OVER 2OVER ; дальше лучше заходить
Если не секрет, для чего нужно так много элементов продублировать?
: 5DUP >R 2OVER R@ -ROT >R 2OVER R> -ROT R> ;
как вариант. Но лучше перепроектировать верхнее слово, так, чтобы этого делать не пришлось.
Просто делается : 4DUP 2OVER 2OVER ; дальше лучше заходить
|
|
|
|
Добавлено: Вс авг 06, 2006 05:46 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Вопрос: как бы мне сделать слово 5DUP? В принципе, я его уже сделал, однако хотелось бы не "лобовой" реализации.
Вопрос: как бы мне сделать слово 5DUP? В принципе, я его уже сделал, однако хотелось бы не "лобовой" реализации.
|
|
|
|
Добавлено: Вс авг 06, 2006 04:18 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Cпасибо
Icefall
Infant
oleg
Cпасибо
[b]Icefall[/b]
[b]Infant[/b]
[b]oleg[/b]
|
|
|
|
Добавлено: Пн июл 24, 2006 23:53 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
oleg писал(а): В книге написано что любую CONSTANT и VARIABLE мы можем забыть (FORGET) Как должна вести себя система,если я забуду BASE -ведь могу,это же переменная ? Да, чуть не забыл. В форте нет переменых!) или констант. Есть только слова, каждое из которых, знает только то, что должно знать. Оно может не делать ничего, например быть маркером, а может выполнять очень сложные действия. И насчет примеров, если хочешь конкретный правильный ответ то указывай систему, которая должна его исполнять. oleg писал(а): : * 2Dup 2.2 D= IF 2DROP 5 ELSE * THEN ; на смал32 должен работать.
[quote="oleg"]В книге написано что любую CONSTANT и VARIABLE мы можем забыть (FORGET) Как должна вести себя система,если я забуду BASE -ведь могу,это же переменная ?[/quote] Да, чуть не забыл. В форте нет переменых!) или констант. Есть только слова, каждое из которых, знает только то, что должно знать. Оно может не делать ничего, например быть маркером, а может выполнять очень сложные действия.
И насчет примеров, если хочешь конкретный правильный ответ то указывай систему, которая должна его исполнять. [quote="oleg"]: * 2Dup 2.2 D= IF 2DROP 5 ELSE * THEN ; [/quote] на смал32 должен работать.
|
|
|
|
Добавлено: Пн июл 24, 2006 00:07 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
WeTrust писал(а): Цитата: : 2 DUP 2 = IF DROP 1 ELSE 2 THEN ;
2 2 + . 3
Cорри.У меня этот пример не работает.(мне кажется что drop лишний). Все верно. Я ошибся WeTrust писал(а): Cорри.У меня этот пример не работает.(мне кажется что drop лишний). Цитата:
: * 2Dup 2.2 D= IF 2DROP 5 ELSE * THEN ;
2 3 * . 6
2 2 * . 5
Получаю другие результаты. Не понимаю так же что такое 2.2.(ибо в стэк в одной системе-Reva- ложится число 22,а в Small32-два числа 0 и 22 ) Гм. Должно бы класться число двойной длинны. Ладно, тогда просто 2 2 без точки между ними. WeTrust писал(а): В книге написано что любую CONSTANT и VARIABLE мы можем забыть (FORGET) Как должна вести себя система,если я забуду BASE -ведь могу,это же переменная ? словарь форта это тоже стек. В классически реализовнных системах, которые имеют слово forget есть такое слово fence - которое определяет до куда можно делать forget - то есть дальше этого слова ( или адреса, который содержит это слово forget не идет). Смотри, каждое новое определение оказывается на вершине "стека-слов" ( это мое название, возможно не очень корректное) Так или иначе забыть конкретное слово нельзя - можно забыть все слова определенные выше указанного вместе с ним. Вот есть ли оно в смал32 я не помню 8( Я не люблю пользоваться forget. WeTrust писал(а): если есть желание, могу оболочку к нему подарить.
Cпасибо.Отправляю адрес в ЛС.
не дошел 8( Повтори на oleg@simeiz.ylt.crimea.com
[quote="WeTrust"]Цитата: : 2 DUP 2 = IF DROP 1 ELSE 2 THEN ;
2 2 + . 3
Cорри.У меня этот пример не работает.(мне кажется что drop лишний). [/quote]
Все верно. Я ошибся 8) [quote="WeTrust"]Cорри.У меня этот пример не работает.(мне кажется что drop лишний). Цитата:
: * 2Dup 2.2 D= IF 2DROP 5 ELSE * THEN ;
2 3 * . 6
2 2 * . 5
Получаю другие результаты. Не понимаю так же что такое 2.2.(ибо в стэк в одной системе-Reva- ложится число 22,а в Small32-два числа 0 и 22 ) [/quote] Гм. Должно бы класться число двойной длинны. Ладно, тогда просто 2 2 без точки между ними. [quote="WeTrust"]В книге написано что любую CONSTANT и VARIABLE мы можем забыть (FORGET) Как должна вести себя система,если я забуду BASE -ведь могу,это же переменная ? [/quote]
словарь форта это тоже стек. В классически реализовнных системах, которые имеют слово forget есть такое слово fence - которое определяет до куда можно делать forget - то есть дальше этого слова ( или адреса, который содержит это слово forget не идет). Смотри, каждое новое определение оказывается на вершине "стека-слов" ( это мое название, возможно не очень корректное) Так или иначе забыть конкретное слово нельзя - можно забыть все слова определенные выше указанного вместе с ним. Вот есть ли оно в смал32 я не помню 8( Я не люблю пользоваться forget. [quote="WeTrust"]если есть желание, могу оболочку к нему подарить.
Cпасибо.Отправляю адрес в ЛС.[/quote]
не дошел 8( Повтори на oleg@simeiz.ylt.crimea.com
|
|
|
|
Добавлено: Вс июл 23, 2006 22:59 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
WeTrust
То во что превратится 2- сильно зависит от того как разится входной поток на слова и числа. По идее должно превращаться в обычную двойку, если неопределено слово 2-.
По поводу слова FORGET. Оно позволяет "забывать" не конкретно какое-то слово, переменную или константу, а всё что было определено после этого слова. Обычно "забывают" слова собственного определения. Чтобы "слишком умные" пользователи не "позабывали" слова из базового словаря (Base относится именно к таким) действие слова Forget ограничивается вершиной словаря на момент запуска форт-системы (хотя и не обязательно).
[b]WeTrust[/b]
То во что превратится 2- сильно зависит от того как разится входной поток на слова и числа. По идее должно превращаться в обычную двойку, если неопределено слово 2-.
По поводу слова FORGET. Оно позволяет "забывать" не конкретно какое-то слово, переменную или константу, а всё что было определено после этого слова. Обычно "забывают" слова собственного определения. Чтобы "слишком умные" пользователи не "позабывали" слова из базового словаря (Base относится именно к таким) действие слова Forget ограничивается вершиной словаря на момент запуска форт-системы (хотя и не обязательно).
|
|
|
|
Добавлено: Вс июл 23, 2006 21:44 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
WeTrust писал(а): IcefallЦитата: В reva нет слова 2-, поэтому оно интерпретируется как число 2. Тут есть один тонкий момент. Действительно help'a на это слово нет. Но предположим что я ввожу новое слово : ^s 2 depth 0 do drop loop ; на него естественно тоже нет help'a но оно работает ! Когда мы вводим в Reva 4 2- это проглатывается будь здоров. В отличие например от ok> 4 2' 2'? Т.е слово 2- не кажется инородным.Что же происходит с минусом ?
Смотрим исходники... При анализе строки учитываются следующие факторы:
* если последний символ - точка, число двойной длины;
* если первый символ минус - число отрицательное.
Остальные символы декодируются с учетом base по таблице fromdigits (файл reva.asm в исходниках). В ней некоторые символы обозначены как недопустимые, а некоторые - игнорируются. В число последних попадают точка и минус. Поэтому вполне допустимо писать извраты типа Код: -1.-.1.-.2.-.3.-.4.- .s -11234 :D
[quote="WeTrust"][b]Icefall[/b] [quote]В reva нет слова 2-, поэтому оно интерпретируется как число 2.[/quote] Тут есть один тонкий момент. Действительно help'a на это слово нет. Но предположим что я ввожу новое слово : ^s 2 depth 0 do drop loop ; на него естественно тоже нет help'a но оно работает ! Когда мы вводим в Reva 4 2- это проглатывается будь здоров. В отличие например от ok> 4 2' 2'? Т.е слово 2- не кажется инородным.Что же происходит с минусом ? [/quote]
Смотрим исходники... При анализе строки учитываются следующие факторы:
* если последний символ - точка, число двойной длины;
* если первый символ минус - число отрицательное.
Остальные символы декодируются с учетом base по таблице fromdigits (файл reva.asm в исходниках). В ней некоторые символы обозначены как недопустимые, а некоторые - игнорируются. В число последних попадают точка и минус. Поэтому вполне допустимо писать извраты типа [code] -1.-.1.-.2.-.3.-.4.- .s -11234[/code]:D
|
|
|
|
Добавлено: Вс июл 23, 2006 21:30 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Icefall
Цитата: В reva нет слова 2-, поэтому оно интерпретируется как число 2. Тут есть один тонкий момент. Действительно help'a на это слово нет. Но предположим что я ввожу новое слово : ^s 2 depth 0 do drop loop ; на него естественно тоже нет help'a но оно работает ! Когда мы вводим в Reva 4 2- это проглатывается будь здоров. В отличие например от ok> 4 2' 2'? Т.е слово 2- не кажется инородным.Что же происходит с минусом ? olegЦитата: : 2 DUP 2 = IF DROP 1 ELSE 2 THEN ;
2 2 + . 3
Cорри.У меня этот пример не работает.(мне кажется что drop лишний). Цитата: : * 2Dup 2.2 D= IF 2DROP 5 ELSE * THEN ;
2 3 * . 6
2 2 * . 5
Получаю другие результаты. Не понимаю так же что такое 2.2.(ибо в стэк в одной системе-Reva- ложится число 22,а в Small32-два числа 0 и 22 ) Цитата: : 2 DUP 2 = IF DROP 1 ELSE 2 THEN ; Тут логика понятна.Временно меняем базу,потом ее восстанавливаем. В связи с этим вопрос. В книге написано что любую CONSTANT и VARIABLE мы можем забыть (FORGET) Как должна вести себя система,если я забуду BASE -ведь могу,это же переменная ? Цитата: если есть желание, могу оболочку к нему подарить.
Cпасибо.Отправляю адрес в ЛС.
[b]Icefall[/b]
[quote]В reva нет слова 2-, поэтому оно интерпретируется как число 2.[/quote] Тут есть один тонкий момент. Действительно help'a на это слово нет. Но предположим что я ввожу новое слово : ^s 2 depth 0 do drop loop ; на него естественно тоже нет help'a но оно работает ! Когда мы вводим в Reva 4 2- это проглатывается будь здоров. В отличие например от ok> 4 2' 2'? Т.е слово 2- не кажется инородным.Что же происходит с минусом ?
[b]oleg[/b] [quote]: 2 DUP 2 = IF DROP 1 ELSE 2 THEN ;
2 2 + . 3 [/quote] Cорри.У меня этот пример не работает.(мне кажется что drop лишний). [quote] : * 2Dup 2.2 D= IF 2DROP 5 ELSE * THEN ;
2 3 * . 6
2 2 * . 5 [/quote] Получаю другие результаты. Не понимаю так же что такое 2.2.(ибо в стэк в одной системе-Reva- ложится число 22,а в Small32-два числа 0 и 22 )
[quote]: 2 DUP 2 = IF DROP 1 ELSE 2 THEN ; [/quote] Тут логика понятна.Временно меняем базу,потом ее восстанавливаем. В связи с этим вопрос. В книге написано что любую CONSTANT и VARIABLE мы можем забыть (FORGET) Как должна вести себя система,если я забуду BASE -ведь могу,это же переменная ?
[quote]если есть желание, могу оболочку к нему подарить. [/quote]
Cпасибо.Отправляю адрес в ЛС.
|
|
|
|
Добавлено: Вс июл 23, 2006 17:26 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Цитата: Пример: Reva 6.0 Windows
ok> 4 2- .s (2) 4 2 ok>
В reva нет слова 2-, поэтому оно интерпретируется как число 2. Там вообще очень мало слов . Набери words и убедись сам.
[quote]Пример: Reva 6.0 Windows
ok> 4 2- .s (2) 4 2 ok> [/quote]
В reva нет слова 2-, поэтому оно интерпретируется как число 2. Там вообще очень мало слов :). Набери words и убедись сам.
|
|
|
|
Добавлено: Вс июл 23, 2006 13:15 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
WeTrust писал(а): oleg Вот смотрите (это Smal32): >6 last1 2 - Ok >10 last1 2 - Ok > Т.е для 6-ки единица вторая. Для 10-ки единица вторая. А потом...ловким движением руки на 4-ке она превращается в элегантную 4-ку. Наверно так и должно быть 6 = 0110 10 = 1010 4 = 0100 кстати можно и так сделать: : .bin BASE @ 2 BASE ! SWAP . BASE ! ; и тогда 10 .bin 1010 WeTrust писал(а): Да.Как консоль. если есть желание, могу оболочку к нему подарить. WeTrust писал(а): Пока для меня отнюдь не очевидно что if используя False убирает его из стэка и не нужно делать DROP... вообще форт старается где можно обходиться без слов dup drop. Но без этих слов не всегда получается выразить алгоритм WeTrust писал(а): Что параметры для DO то же испаряются... Вот циклы do loop я не люблю. Я бы их вообще выкинул из стандарта. Все прекрасно разруливается с помощью begin while until repeat again слов, а циклы с do loop пользуют стек возвратов и иногда усложняют жизнь. WeTrust писал(а): Пример: Reva 6.0 Windows
ok> 4 2- .s (2) 4 2 ok>
Пример(Small32) >4 2- .s
Contents Of Stack +------------------------------------------+ ¦ ¦ Hex ¦ Decimal ¦ Octal ¦ ¦----+----------+------------+-------------¦ ¦ 0 ¦ 2 ¦ 2 ¦ 2 ¦ +------------------------------------------+ - Ok непонятный и сомнительный пример Одновременно Если только ты не переопределил слово 2-, конечно. А то- это известная шутка: : 2 DUP 2 = IF DROP 1 ELSE 2 THEN ; 2 2 + . 3 Или так: : * 2Dup 2.2 D= IF 2DROP 5 ELSE * THEN ; 2 3 * . 6 2 2 * . 5 %))) WeTrust писал(а): В одной системе после вычитания в стеке остается одно число,в другой-два. Как же нет разницы ? не должно у тебя такого получиться на стеке! и еще в смале можно пользоваться s. иногда это удобнее. WeTrust писал(а): P.S. Cовсем не понимаю значения выражения "шитый код". Почему он шитый,а не вязанный или не сплетенный ? .
Придумал не я Так это называется.
[quote="WeTrust"]oleg Вот смотрите (это Smal32): >6 last1 2 - Ok >10 last1 2 - Ok > Т.е для 6-ки единица вторая. Для 10-ки единица вторая. А потом...ловким движением руки на 4-ке она превращается в элегантную 4-ку. Наверно так и должно быть [/quote]
6 = 0110 10 = 1010 4 = 0100 8) кстати можно и так сделать:
: .bin BASE @ 2 BASE ! SWAP . BASE ! ;
и тогда
10 .bin 1010 [quote="WeTrust"]Да.Как консоль. [/quote] если есть желание, могу оболочку к нему подарить. [quote="WeTrust"]Пока для меня отнюдь не очевидно что if используя False убирает его из стэка и не нужно делать DROP... [/quote]
вообще форт старается где можно обходиться без слов dup drop. Но без этих слов не всегда получается выразить алгоритм 8) [quote="WeTrust"]Что параметры для DO то же испаряются... [/quote] Вот циклы do loop я не люблю. Я бы их вообще выкинул из стандарта. Все прекрасно разруливается с помощью begin while until repeat again слов, а циклы с do loop пользуют стек возвратов и иногда усложняют жизнь. [quote="WeTrust"]Пример: Reva 6.0 Windows
ok> 4 2- .s (2) 4 2 ok>
Пример(Small32) >4 2- .s
Contents Of Stack +------------------------------------------+ ¦ ¦ Hex ¦ Decimal ¦ Octal ¦ ¦----+----------+------------+-------------¦ ¦ 0 ¦ 2 ¦ 2 ¦ 2 ¦ +------------------------------------------+ - Ok [/quote] непонятный и сомнительный пример 8) Одновременно Если только ты не переопределил слово 2-, конечно. А то- это известная шутка:
: 2 DUP 2 = IF DROP 1 ELSE 2 THEN ;
2 2 + . 3
8)
Или так:
: * 2Dup 2.2 D= IF 2DROP 5 ELSE * THEN ;
2 3 * . 6
2 2 * . 5
%)))
[quote="WeTrust"]В одной системе после вычитания в стеке остается одно число,в другой-два. Как же нет разницы ? [/quote]
не должно у тебя такого получиться на стеке! и еще в смале можно пользоваться s. иногда это удобнее.
[quote="WeTrust"] P.S. Cовсем не понимаю значения выражения "шитый код". Почему он шитый,а не вязанный или не сплетенный ? .[/quote]
Придумал не я 8) Так это называется.
|
|
|
|
Добавлено: Вс июл 23, 2006 06:29 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
oleg
Вот смотрите (это Smal32):
>6 last1
2 - Ok
>10 last1
2 - Ok
>
Т.е для 6-ки единица вторая.
Для 10-ки единица вторая.
А потом...ловким движением руки
на 4-ке она превращается в элегантную 4-ку.
Наверно так и должно быть
Цитата: Ты исследуешь СмАл32? Да.Как консоль. Пока для меня отнюдь не очевидно что if используя False убирает его из стэка и не нужно делать DROP... Что параметры для DO то же испаряются... Приглядываюсь.. Цитата: ноги ростут от систем с использованием косвенного и прямого шитого кода, если у тебя такая система - то быстрее и короче получится если присать слитно, а для подпрограммного шитого кода может оказаться, что разницы нет никакой.
Пример:
Reva 6.0 Windows
ok> 4 2- .s
(2) 4 2
ok>
Пример(Small32)
>4 2- .s
Contents Of Stack
+------------------------------------------+
¦ ¦ Hex ¦ Decimal ¦ Octal ¦
¦----+----------+------------+-------------¦
¦ 0 ¦ 2 ¦ 2 ¦ 2 ¦
+------------------------------------------+
- Ok
>
В одной системе после вычитания в стэке остается одно число,в другой-два.
Как же нет разницы ?
P.S. Cовсем не понимаю значения выражения "шитый код". Почему он шитый,а
не вязанный или не сплетенный ? .
[b]oleg[/b]
Вот смотрите (это Smal32):
>6 last1
2 - Ok
>10 last1
2 - Ok
>
Т.е для 6-ки единица вторая.
Для 10-ки единица вторая.
А потом...ловким движением руки
на 4-ке она превращается в элегантную 4-ку.
Наверно так и должно быть :)
[quote]Ты исследуешь СмАл32?[/quote] Да.Как консоль. Пока для меня отнюдь не очевидно что if используя False убирает его из стэка и не нужно делать DROP... Что параметры для DO то же испаряются... Приглядываюсь..
[quote]ноги ростут от систем с использованием косвенного и прямого шитого кода, если у тебя такая система - то быстрее и короче получится если присать слитно, а для подпрограммного шитого кода может оказаться, что разницы нет никакой. [/quote]
Пример:
Reva 6.0 Windows
ok> 4 2- .s
(2) 4 2
ok>
Пример(Small32)
>4 2- .s
Contents Of Stack
+------------------------------------------+
¦ ¦ Hex ¦ Decimal ¦ Octal ¦
¦----+----------+------------+-------------¦
¦ 0 ¦ 2 ¦ 2 ¦ 2 ¦
+------------------------------------------+
- Ok
>
В одной системе после вычитания в стэке остается одно число,в другой-два.
Как же нет разницы ?
P.S. Cовсем не понимаю значения выражения "шитый код". :roll: Почему он шитый,а
не вязанный или не сплетенный ? .
|
|
|
|
Добавлено: Вс июл 23, 2006 06:01 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
WeTrust писал(а): Вы привели пример четного 12. А я говорил для 4 и 8. 0100 DUP .s 0100 0100 DUP .s 0100 0100 0100 1- .s 0100 0100 0011 XOR .s 0100 0111 AND . 0100 вот для 4-ех А это для 8-и 1000 DUP .s 1000 1000 DUP .s 1000 1000 1000 1- .s 1000 1000 0111 XOR .s 1000 1111 AND . 1000 WeTrust писал(а): И последний значащий бит для 12 все таки будет 03,если для нечетного они говорят 01. (т.е вводят нумерацию с единицы).Да это число 4,но как для числа 8 интерпретировать ответ 8 ? Вероятно ты не то хочешь получить. Одно дело проявить самый младший бит числа - это то, что ты привел, а другое дело узнать каким по счету будет младший значащий бит( это то, что ты хочешь? ) : : l?bit 1 AND -1 INVERT ; : ?bit ( n --> c ) 0 BEGIN OVER l?bit WHILE 1+ SWAP 2/ SWAP REPEAT NIP ; но это просто в цикле ищем. А насчет того, можно ли это получить математически нужно подумать. WeTrust писал(а): как для числа 8 интерпретировать ответ 8 ? Повторюсь, ты не то хочешь - ты хочешь найти номер бита начиная с правого края, а алгоритм приводишь, предназначенный для нахождения самого младшего значащего бита! А этот алгоритм для чисел состоящих из одной двоичной единицы с кучей нулей всегда будет выдвать это самое число WeTrust писал(а): В некоторых системах пишут и о примитиве 2-.Но что-то пробовал...решил остановиться на раздельном написании.
ноги ростут от систем с использованием косвенного и прямого шитого кода, если у тебя такая система - то быстрее и короче получится если присать слитно, а для подпрограммного шитого кода может оказаться, что разницы нет никакой.
Ты исследуешь СмАл32?
[quote="WeTrust"]Вы привели пример четного 12. А я говорил для 4 и 8. [/quote]
0100 DUP .s 0100 0100 DUP .s 0100 0100 0100 1- .s 0100 0100 0011 XOR .s 0100 0111 AND . 0100
вот для 4-ех 8)
А это для 8-и 1000 DUP .s 1000 1000 DUP .s 1000 1000 1000 1- .s 1000 1000 0111 XOR .s 1000 1111 AND . 1000
[quote="WeTrust"]И последний значащий бит для 12 все таки будет 03,если для нечетного они говорят 01. (т.е вводят нумерацию с единицы).Да это число 4,но как для числа 8 интерпретировать ответ 8 ? [/quote] Вероятно ты не то хочешь получить. Одно дело проявить самый младший бит числа - это то, что ты привел, а другое дело узнать каким по счету будет младший значащий бит( это то, что ты хочешь? ) :
: l?bit 1 AND -1 INVERT ;
: ?bit ( n --> c ) 0 BEGIN OVER l?bit WHILE 1+ SWAP 2/ SWAP REPEAT NIP ; но это просто в цикле ищем. А насчет того, можно ли это получить математически нужно подумать.
[quote="WeTrust"]как для числа 8 интерпретировать ответ 8 ?[/quote] Повторюсь, ты не то хочешь - ты хочешь найти номер бита начиная с правого края, а алгоритм приводишь, предназначенный для нахождения самого младшего значащего бита! А этот алгоритм для чисел состоящих из одной двоичной единицы с кучей нулей всегда будет выдвать это самое число :)
[quote="WeTrust"]В некоторых системах пишут и о примитиве 2-.Но что-то пробовал...решил остановиться на раздельном написании.[/quote]
ноги ростут от систем с использованием косвенного и прямого шитого кода, если у тебя такая система - то быстрее и короче получится если присать слитно, а для подпрограммного шитого кода может оказаться, что разницы нет никакой.
Ты исследуешь СмАл32?
|
|
|
|
Добавлено: Вс июл 23, 2006 05:27 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Все...вроде понял...Мдя...
Для 8 последняя значимая 1
четвертая,а поэтому это число 8
Без бутылки не разберешься..
Думалось что слово Цитата: выделяющее в двоичном разложении числа младшую единицу. должно возвращать в стэке номер бита
в котором она находится...
Вот это обдумывал.И такое решение искал.
Все...вроде понял...Мдя...
Для 8 последняя значимая 1
четвертая,а поэтому это число 8
:shock:
Без бутылки не разберешься..
Думалось что слово [quote]выделяющее в двоичном разложении числа младшую единицу. [/quote] должно возвращать в стэке номер бита
в котором она находится...
Вот это обдумывал.И такое решение искал.
|
|
|
|
Добавлено: Вс июл 23, 2006 05:13 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
oleg
Вы привели пример четного 12.
А я говорил для 4 и 8.
И последний значащий бит для
12 все таки будет 03,если для
нечетного они говорят 01.
(т.е вводят нумерацию с единицы).Да это число 4,но
как для числа 8 интерпретировать ответ 8 ?
Цитата: : ?1bit ( n --> ) 1 AND ; И все. Или флаг надо получить?:
: bit>flag ( n --> flag ) 1 AND 1- invert ; Спасибо.Буду изучать. Цитата: Между 1 и - не обязательно ставить пробел - есть такой приметив 1- .
В некоторых системах пишут и о примитиве 2-.Но что-то пробовал...решил остановиться на раздельном написании.
[b]oleg[/b]
Вы привели пример четного 12.
А я говорил для 4 и 8.
И последний значащий бит для
12 все таки будет 03,если для
нечетного они говорят 01.
(т.е вводят нумерацию с единицы).Да это число 4,но
как для числа 8 интерпретировать ответ 8 :shock: ?
[quote]: ?1bit ( n --> ) 1 AND ; И все. Или флаг надо получить?:
: bit>flag ( n --> flag ) 1 AND 1- invert ; [/quote]
Спасибо.Буду изучать.
[quote]Между 1 и - не обязательно ставить пробел - есть такой приметив 1- . [/quote]
В некоторых системах пишут и о примитиве 2-.Но что-то пробовал...решил остановиться на раздельном написании.
|
|
|
|
Добавлено: Вс июл 23, 2006 04:55 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
WeTrust писал(а): "Интересно слово LAST1 (последний бит),выделяющее в двоичном разложении числа младшую единицу. : LAST1 DUP DUP 1 - XOR AND ; Однако...Корректно работая для нечетных чисел (в силу того что там всегда 1 последняя) дает неверный результат для 4 , 8 ...
Брр. Ничего не понял 8(
Просто выделить определенный бит? так:
: ?1bit ( n --> ) 1 AND ;
И все.
Или флаг надо получить?:
: bit>flag ( n --> flag ) 1 AND 1- invert ;
Между 1 и - не обязательно ставить пробел - есть такой приметив 1- .
Все. Доехало Нужно найти младший значащий бит.
Но тогда все должно работать:
0101
DUP .s
0101 0101
DUP .s
0101 0101 0101
1- .s
0101 0101 0100
XOR .s
0101 0001
AND .
0001
то же для четных чисел:
1100
DUP .s
1100 1100
DUP .s
1100 1100 1100
1- .s
1100 1100 1011
XOR .s
1100 0111
AND .
0100
Все правильно!?
[quote="WeTrust"]"Интересно слово LAST1 (последний бит),выделяющее в двоичном разложении числа младшую единицу. : LAST1 DUP DUP 1 - XOR AND ; Однако...Корректно работая для нечетных чисел (в силу того что там всегда 1 последняя) дает неверный результат для 4 , 8 ... [/quote]
Брр. Ничего не понял 8(
Просто выделить определенный бит? так:
: ?1bit ( n --> ) 1 AND ;
И все.
Или флаг надо получить?:
: bit>flag ( n --> flag ) 1 AND 1- invert ;
Между 1 и - не обязательно ставить пробел - есть такой приметив 1- .
Все. Доехало 8) Нужно найти младший значащий бит.
Но тогда все должно работать:
0101
DUP .s
0101 0101
DUP .s
0101 0101 0101
1- .s
0101 0101 0100
XOR .s
0101 0001
AND .
0001
то же для четных чисел:
1100
DUP .s
1100 1100
DUP .s
1100 1100 1100
1- .s
1100 1100 1011
XOR .s
1100 0111
AND .
0100
Все правильно!?
|
|
|
|
Добавлено: Вс июл 23, 2006 04:22 |
|
|
|
|