这个问题与以下内容有关:
过去几年,我一直在思考我使用的语言喜欢和不喜欢的事情。我一直想编写自己的语言,但从未实现过。
我也拥有Lego RCX和NXT,但大多数时候我从未让我的机器人做任何事情,因为它们具有限制性的可视化编程环境。
我认为我将为NXT设计我的编程语言,因为已经有了大量通用语言,而NXT为我提供了具体的问题和目标,希望能够提供一个好的沙箱来玩耍。
现在该怎么办?我从哪里开始?我需要知道什么?
如果可能,我会使用Python或Clojure编写编译器。有一个NXT的SDK,但也有一个汇编语言。哪种方法最好/最容易?
Lego NXT拥有小屏幕,USB和蓝牙,它有4个传感器端口(数字和模拟),3个输出端口和2个ARM处理器,一个主处理器和一个协处理器。http://mindstormsnxt.blogspot.com/2006/08/whats-inside-nxt-brick.html
编程NXT将涉及处理数据和事件,因此某种单一数据流/反应式风格似乎是适当的。它还应该很好地处理并行任务,因此我考虑使用函数式编程。我目前也在考虑基于堆栈的方法。
在我的头脑中,我已经试图统一这些概念并想出示例代码。我正在考虑一个树而不是堆栈,其中函数分支可以并行运行。例如:
# implicit main stack
5 5 +
# 10
# quoted branch or list
[1 -]
# 10 [1 -]
# eval list and recur until false
loop
# [9 8 7 6 5 4 3 2 1 0]
# define stack as a function
[1 = [1 8 motor] [1 0 motor] if] fn
# [9 8 7 6 5 4 3 2 1 0] <function>
# define function as a symbol
"handle-press" def
# [9 8 7 6 5 4 3 2 1 0]
# reactively loop over infinite lazy stack returned by sensor
# in a parallel branch
|4 sensor handle-press for|
# [9 8 7 6 5 4 3 2 1 0] [8 nil nil nil 8 ...]
显然,在这个推理过程中仍然存在明显的漏洞,但我还是发布了这个草图,以引发一些有帮助的回答和讨论。