LISP для Ардуино

KPG
Offline
Зарегистрирован: 09.06.2019

Дополню топик такими ссылками.

Некоторое "обсуждение" amForth на форуме easyelectronics.ru http://forum.easyelectronics.ru/viewtopic.php?f=4&t=14783

И на робофорум некоторые примеры  http://roboforum.ru/forum58/topic4406-60.html

P.S. Сам проект amForth находится здесь http://amforth.sourceforge.net/

https://flashforth.com/ Есть и среди других проектов такой  Форт для AVR ...

 Возможно, интересно к ознакомлению и такое обсуждение на форуме https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=61758 А вот бы на FORTH написать...

Попробовать это всё для AVR достаточно просто. :)

 И немного другого понимания возможностей использования Форт

Статья:  Универсальный DSL. Возможно ли это?

https://habr.com/ru/company/tinkoff/blog/477902/

Для пытливых умов:  "Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." © Козьма Прутков

http://fforum.winglion.ru/ - Forth forum рускоязычых пользователей Форт языка.

Успехов!, хотя не все смогут понять данный мессендж.

KPG
Offline
Зарегистрирован: 09.06.2019

Advanced Forth в электромеханическом конструкторе "Технолидер-1" http://support.danishevsky.technology/index.html

https://youtu.be/3_ILjVzP-8A

P.S. Международная конференция FIT-M 2019, спикеры В.А.Холопов и А.В.Парфенов https://www.youtube.com/watch?v=Z3ePPWBFHGc

Похоже на переизобретении подхода в сенсорных сетях, например, описанного в http://dspace.nbuv.gov.ua/bitstream/handle/123456789/1569/74-Ragozin.pdf

KPG
Offline
Зарегистрирован: 09.06.2019

Arduino & Forth

https://arduino-forth.com/

KPG
Offline
Зарегистрирован: 09.06.2019

STABLE an extreme small an fast FORTH-VM

arithmetic
+ ( a b--a+b) addition
- ( a b--a-b) subtraction
* ( a b--a*b) multiply
/ ( a b--a/b) division
% ( a b--a%b) modulo (division reminder)
_ ( n-- -n) negate

bit manipulation
& ( a b--a&b) 32 bits and
| ( a b--a|b) 32 bits or
~ ( n -- n') not, all bits inversed (0=>1 1=>0)

stack
# ( a--a a) duplicate top of stack
\ ( a b--a) drop top of stack
$ ( a b--b a) swap top of stack
@ ( a b--a b a) (over) copy next of stack on top

register
x ( --) select register x (x: a..z)
; ( --value) fetch from selected register
: ( value--) store into selected register
? ( --value) selected register contains an address. Fetch value from there
! ( value--) selected register contains an address. Store value there.
+ ( --) immediately after register, increment content by 1
- ( --) immediately after register, decrement content by 1

functions
{X ( --) start function definition for function X (A..Z)
} ( --) end of function definition
X ( --) call function X (A..Z)

I/O
. ( value--) display value as decimal number on stdout
, ( value--) send value to terminal, 27 is ESC, 10 is newline, etc.
^ ( --key) read key from terminal, don't wait for newline.
" ( --) read string until next " put it on stdout
0..9 ( --value) scan decimal number until non digit. to push two values
on stack separete those by space (4711 3333)
to enter negative numbers call _ (negate) after the number
0..9.0 ( --value) to enter float numbers digits must contain one . (only
available if float module is active, see 0`)

conditions
< ( a b--f) true (-1) if b is < a, false (0) otherwise
> ( a b--f) true (-1) if b is > a, false (0) otherwise
= ( a b--f) true (-1) if a is queal to b, flase (0) otherwise
( ( f--) if f is true, execute content until ), if false
skip code until )
[ ( f--f) begin while loop only if f is true. keep flag on stack
if f is false, skip code until ]
] ( f--) repeat the loop if f is true. If f is false, continue
with code after ]

extensions (expermiental)
` ( n--) call extension function n
0 ... switch to floating point mode
+ - * / . _ < >

1 ... switch back to interger mode
2 ... dbg, function dbg() to set breakpoint for debugging
3 ... switch traceing on (IP, TOKEN, SP, STACK) (not in stable_fast)
4 ... switch traceing off. Tracing int file trace
5 ... < = > without dropping their 2nd operand (NOS). This
is the behavior of Santors original virtual engine.
6 ... mstime, time in milliseconds, for timing
7 ... ( n--) edit block number n
8 ... ( n--) load block number n. Data segment remains. So this
is a kind of shared memory. Registers could be used as arguments.
After leaving the application and 0 is on TOS, STABLE will be
terminated. A value not equal 0 on TOS will load this block.
If the block is not valid, the command block will be loaded
Use block 0 as an index for all your block numbers
9 ... ( n 9--) copy block n (1000 cells) into memory begining of 1000.
write back the old content before. At exit write back current
data block. STABLE is starting with block 0 loaded.
10 ... trace only current state (ip, rp, sp, ..) on stdout
11 ... quit VM ( n--) n is exit code to os
12 ... ( --n) push current data block number on stack
13 ... ( --) copy 1000 cells from address 1000 to 2000
14 ... ( --) copy 1000 cells from address 2000 to 1000

https://www-w3group-de.translate.goog/quora.html?_x_tr_sl=auto&_x_tr_tl=ru&_x_tr_hl=en-US&_x_tr_pto=wapp&_x_tr_sch=http

KPG
Offline
Зарегистрирован: 09.06.2019

Статья на Хабр в дневном топе по тематике Форт.

My4TH — домашний компьютер без процессора (c минимумом микрух)

P.S. На Github есть проекты реализации и Lisp на Форте или с использованием в Форт.

К модерторам форума: Может имеет смысл добавить в название топика и словр Forth (Форт) для полноты. :)