- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
: %fib
( left right count limit -- result )
2dup u<= if 2drop swap drop exit then
1+ 2swap tuck + 2swap recurse ;
: fib
( n -- n )
1 2 0 -rot 2swap %fib ;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+125
: %fib
( left right count limit -- result )
2dup u<= if 2drop swap drop exit then
1+ 2swap tuck + 2swap recurse ;
: fib
( n -- n )
1 2 0 -rot 2swap %fib ;
Где там ForthGovno?
Фибоначчиевы кучи не требуют вычисления чисел в рантайме, числа используются только при анализе. Да и вообще эти кучи используются редко, ибо сливают pairing heaps.
Быть может, при написании аллокаторов кто-то использовал... Есть у кого примеры?
Именно на практике и считал... на практике по алгоритмическому языку паскаль ;)
Код был написан для ПЕ, а именно, второго задания.
P.S. что есть ПЕ?
ПЕ = PE = Project Euler
Хм. Тоже, единтсвенное что пришло в голову. Я видел захардкоженый (наверняка кодогенерированный) вариант.
> Код был написан для ПЕ
Что и требовалось доказать.
Чем отличается от обычной кучи?
Это более менее описывает происходящее (не тестировал).
Во-первих именование, что значит "%"? Вспомогательные слова принято называть (вот-так).
Во-вторых, стековый комментарий располагается на той же строчке, где и начало опеделения, через 2 пробела, а ещё он не соответствует реальным параметрам, что только запутывает: у первого слова должно быть ( left right limit count -- result ), слова работают с беззнаковыми числами, поэтому у второго должно быть ( u1 -- u2 ), а не n (это значит знаковое).
В-третьих много лишних и бесполезных действий: SWAP DROP — это NIP , 1 2 0 -ROT — это 0 1 2.
Вот исправленная версия:
http://ideone.com/NK9ydn Или с локалками, если тяжело вращать в голове стек:
http://ideone.com/TyW0If Но вообще на императивном языке лучше писать императивно:
http://ideone.com/qrTUo5