Автор |
Сообщение |
|
|
Заголовок сообщения: |
|
|
|
chess писал(а): Нужно бы написать слово CREATE-NONAME
Код: : CREATE-NONAME \ --> xt ALIGN-BYTES @ DUP 4 > IF 5 - ALLOT ELSE 1 - ALLOT THEN HERE DUP DOES>A ! ['] _CREATE-CODE COMPILE, ;
: FOO CREATE-NONAME SWAP , DOES> TUCK +! @ ;
STARTLOG 1 FOO ->VECT BAR 2 BAR . 6 BAR . CR 5 FOO ->VECT BAR1 4 BAR1 . 10 BAR1 . CR 8 FOO ->VECT BAR2 6 BAR2 . 11 BAR2 . CR ЛОГ Код: 3 9 9 19 14 25
Ok
[quote="chess"]Нужно бы написать слово CREATE-NONAME [/quote]
[code]: CREATE-NONAME \ --> xt ALIGN-BYTES @ DUP 4 > IF 5 - ALLOT ELSE 1 - ALLOT THEN HERE DUP DOES>A ! ['] _CREATE-CODE COMPILE, ;
: FOO CREATE-NONAME SWAP , DOES> TUCK +! @ ;
STARTLOG 1 FOO ->VECT BAR 2 BAR . 6 BAR . CR 5 FOO ->VECT BAR1 4 BAR1 . 10 BAR1 . CR 8 FOO ->VECT BAR2 6 BAR2 . 11 BAR2 . CR[/code]
ЛОГ [code]3 9 9 19 14 25
Ok[/code]
|
|
|
|
Добавлено: Пн мар 03, 2008 13:49 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
rvm писал(а): А в какой форме хотелось бы записать решение? (или, другими словами, чего не хватает в стандарте)
Во-первых так чуть покороче будет:
Код: : foo ( n -- xt ) HERE >R , :NONAME R> POSTPONE LITERAL POSTPONE TUCK POSTPONE +! POSTPONE @ POSTPONE ; ; Нужно бы написать слово CREATE-NONAME Тогда: Код: : foo CREATE-NONAME , DOES> TUCK +! @ ;
[quote="rvm"]А в какой форме хотелось бы записать решение? (или, другими словами, чего не хватает в стандарте)[/quote]
Во-первых так чуть покороче будет:
[code]: foo ( n -- xt ) HERE >R , :NONAME R> POSTPONE LITERAL POSTPONE TUCK POSTPONE +! POSTPONE @ POSTPONE ; ;[/code]Нужно бы написать слово CREATE-NONAME Тогда: [code]: foo CREATE-NONAME , DOES> TUCK +! @ ;[/code]
|
|
|
|
Добавлено: Чт ноя 22, 2007 18:59 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
К заданной вначале формальной постановке — не годиться. Код: 10 10 5 accgen TUCK EXECUTE . EXECUTE . должно дать 15 25.
К заданной вначале формальной постановке — не годиться. [code]10 10 5 accgen TUCK EXECUTE . EXECUTE . [/code] должно дать 15 25.
|
|
|
|
Добавлено: Ср ноя 07, 2007 15:23 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
а acc foo ' foo годится?
а acc foo ' foo годится?
|
|
|
|
Добавлено: Вт ноя 06, 2007 23:33 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Классический форт заточен на именованные определения, а с анонимными трудней. Да, конечно с TUCK самый короткий вариант, по числу слов соперничает с лиспом Но, оно не возвращает xt, что противоречит постановке задачи. В рамках ANS возможен такой вариант
Код: : accgen ( n -- xt ) HERE SWAP , >R :NONAME R> POSTPONE LITERAL POSTPONE TUCK POSTPONE +! POSTPONE @ POSTPONE ; ;
А в какой форме хотелось бы записать решение? (или, другими словами, чего не хватает в стандарте)
Классический форт заточен на именованные определения, а с анонимными трудней. Да, конечно с TUCK самый короткий вариант, по числу слов соперничает с лиспом :) Но, оно не возвращает xt, что противоречит постановке задачи. В рамках ANS возможен такой вариант
[code]: accgen ( n -- xt ) HERE SWAP , >R :NONAME R> POSTPONE LITERAL POSTPONE TUCK POSTPONE +! POSTPONE @ POSTPONE ; ;[/code]
А в какой форме хотелось бы записать решение? (или, другими словами, чего не хватает в стандарте)
|
|
|
|
Добавлено: Вт ноя 06, 2007 21:17 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
: acc create , does> tuck +! @ ;
: acc create , does> tuck +! @ ;
|
|
|
|
Добавлено: Пн ноя 05, 2007 00:55 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
: acc create , does> dup >r +! r> @ ;
: acc create , does> dup >r +! r> @ ;
|
|
|
|
Добавлено: Пн ноя 05, 2007 00:52 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Код: : acc create , does> dup >r @ + dup r> ! ; 10 acc foo
[code]: acc create , does> dup >r @ + dup r> ! ; 10 acc foo[/code]
|
|
|
|
Добавлено: Вс ноя 04, 2007 22:35 |
|
|
|
|
|
Заголовок сообщения: |
генератор аккумуляторов |
|
|
Определить слово foo ( n -- xt ), которое берет n и возвращает xt ( i -- o+i ) слова-аккумулятора. Аккумулятор имеет начальное значение n, увеличивается на поданное значение i и возвращает новое значение.
Код для проверки Код: 11 foo ->VECT bar1 0 bar1 . \ 11 = 11+0 10 bar1 . \ 21 = 11+10 4 bar1 . \ 25 = 21+4
1 foo ->VECT bar2 0 bar2 . \ 1 2 bar2 . \ 3 5 bar2 . \ 8
5 bar1 . \ 30
Предпочтительны решения без EVALUATE
Примеры на других языках: paulgraham accgen.html
Определить слово foo ( n -- xt ), которое берет n и возвращает xt ( i -- o+i ) слова-аккумулятора. Аккумулятор имеет начальное значение n, увеличивается на поданное значение i и возвращает новое значение.
Код для проверки [code] 11 foo ->VECT bar1 0 bar1 . \ 11 = 11+0 10 bar1 . \ 21 = 11+10 4 bar1 . \ 25 = 21+4
1 foo ->VECT bar2 0 bar2 . \ 1 2 bar2 . \ 3 5 bar2 . \ 8
5 bar1 . \ 30
[/code]
Предпочтительны решения без EVALUATE
Примеры на других языках: paulgraham accgen.html
|
|
|
|
Добавлено: Вс ноя 04, 2007 18:16 |
|
|
|
|