【问题标题】:Dragon curve in Racket球拍中的龙曲线
【发布时间】:2014-11-26 18:59:57
【问题描述】:

我在这里遇到了一个小问题。我想用球拍制作龙曲线。 首先,我想用给定的龙曲线顺序列出一个列表。

例如:订单 3 会给我列表:(list 'R 'R 'L 'R 'R 'L 'L)。 L 表示向左转 90 度,R 表示向右转 90 度。

按给定顺序生成列表的算法是:

  1. 第一道菜总是右转(列表 'R)
  2. 下一个顺序是上一个顺序加上元素(列表'R)加上上一个顺序,其中中间符号被替换为'L。

所以,第二个顺序是 (list 'R 'R 'L)

但我真的不知道,如何将这个“算法”写成(递归)代码。

;;number -> list
;; number 'n' is the order of the dragon curve.
;; (dragon-code 3) should make: (list 'R 'R 'L 'R 'R 'L 'L)
(define (dragon-code n)
  (cond
    [(zero? n) empty]
    [else

我会感谢每一个提示! :)

【问题讨论】:

    标签: recursion scheme racket curve


    【解决方案1】:

    文字的直译如下:

    (define (dragon order)
      (if (= order 1)
          (list 'R)
          (append (dragon (- order 1)) 
                  (list 'R)
                  (replace-middle-with-L (dragon (- order 1))))))
    

    实现replace-middle-with-L 并使用(dragon 3) 进行测试。

    【讨论】:

    • 感谢您的帮助!我已经完成了“replace-middle-with-L”的实现。我需要获取中间元素的索引位置并构建旧列表直到这个中间元素。然后,我必须附加(列表'L)。然后,我必须在该中间元素后面附加所有内容。但是最后一步我该怎么做呢?
    • @xEscape 了解split-at(首选)或takedrop
    猜你喜欢
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2012-01-23
    • 2021-02-07
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多