【发布时间】:2011-04-30 04:19:30
【问题描述】:
这个问题与
有关在过去的几年里,我一直在思考我喜欢和不喜欢的语言。我一直想编写自己的语言,但从未这样做过。
我还拥有 Lego RCX 和 NXT,但大多数时候我从未真正让我的机器人做任何事情,因为它们的可视化编程环境受限。
我想我会为 NXT 设计我的编程语言,因为已经有大量的通用语言,而 NXT 给了我一组具体的问题和目标,并希望有一个不错的沙盒可供使用。
现在呢?我从哪里开始?我需要知道什么?
如果可能,我会用 Python 或 Clojure 编写编译器。有一个SDK for the NXT,也有一个Assembly language。最好/最简单的路线是什么?
乐高 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 ...]
这背后的推理显然仍然存在漏洞,但我还是发布了这个粗略的草图,以引发一些有用的答案和讨论。
【问题讨论】:
标签: python programming-languages clojure forth nxt