在球拍中的龙曲线

时间:2014-11-26 18:59:57

标签: recursion scheme racket curve

我在这里遇到了一些问题。我想用Racket制作龙曲线。 首先,我想根据龙曲线的给定顺序制作一个列表。

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

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

  1. 第一个订单始终是右转(列表'R)
  2. 下一个订单是前一个订单加上元素(列表'R)加上前一个订单,其中中间符号被'L。
  3. 替换。

    所以,第二个顺序是(列出'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
    

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

1 个答案:

答案 0 :(得分: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)进行测试。