Dan*_*Oak 5 arrays list l-systems j
我将创建一个可以从L系统语法生成字符串的程序.
Astrid Lindenmayer用于模拟藻类生长的原始L系统是:
variables : A B constants : none axiom : A rules : (A ? AB), (B ? A)
产生:
iteration | resulting model
0 | A
1 | AB
2 | ABA
3 | ABAAB
4 | ABAABABA
5 | ABAABABAABAAB
我自己在J中天真地实现了这样:
algae =: 1&algae : (([: ; (('AB'"0)`('A'"0) @. ('AB' i. ]))&.>"0)^:[) "1 0 1
(i.6) ([;algae)"1 0 1 'A'
?????????????????
?0?A ?
?????????????????
?1?AB ?
?????????????????
?2?ABA ?
?????????????????
?3?ABAAB ?
?????????????????
?4?ABAABABA ?
?????????????????
?5?ABAABABAABAAB?
?????????????????
Run Code Online (Sandbox Code Playgroud)
分步说明:
('AB' i. ]) 'ABAAB' NB. determine indices of productions for each variable
0 1 0 0 1
'AB'"0`('A'"0)@.('AB' i. ])"0 'ABAAB' NB. apply corresponding productions
AB
A
AB
AB
A
'AB'"0`('A'"0)@.('AB' i. ])&.>"0 'ABAAB' NB. the same &.> to avoid filling
??????????????
?AB?A?AB?AB?A?
??????????????
NB. finally ; and use ^: to iterate
Run Code Online (Sandbox Code Playgroud)
通过类比,这是L系统的第四次迭代的结果,其产生Thue-Morse序列
4 (([: ; (0 1"0)`(1 0"0)@.(0 1 i. ])&.>"0)^:[) 0
0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0
Run Code Online (Sandbox Code Playgroud)
这是迄今为止我能做的最好的事情.我相信拳击拆箱方法在这里是不够的.这是我第一次错过J中的链接列表 - 如果没有它们,编码语法会更加困难.
我真正想到的是:
a)构建构建最终字符串的那些函数的动名词列表(在我的例子中,这些函数是常量,'AB'"0但在树形建模函数的情况下是乌龟图形命令)和唤起(`:6)它,
或者我能够编码的东西:
b)构造一串合法的J句子,构建最终字符串并执行(".)它.
但我不确定这些程序是否有效.
任何提示以及关于a)和b)的评论都非常感谢!
以下将用空格填充矩形数组:
L=: rplc&('A';'AB';'B';'A')
L^:(<6) 'A'
A
AB
ABA
ABAAB
ABAABABA
ABAABABAABAAB
Run Code Online (Sandbox Code Playgroud)
或者,如果您不想填充:
L&.>^:(<6) <'A'
???????????????????????????????????????
?A?AB?ABA?ABAAB?ABAABABA?ABAABABAABAAB?
???????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
显然你会想要检查rplc/ stringreplace看看幕后发生了什么.
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |