2014-11-26 2 views
2

У меня здесь небольшая проблема. Я хочу, чтобы кривая дракона использовала Racket. Во-первых, я хочу составить список с поворотами данного порядка кривой дракона.Кривая дракона в Racket

Например: Приказ 3 дал мне список: (список 'R' R 'L' R 'R' L 'L). L означает поворот на 90 градусов влево, а R означает поворот на 90 градусов вправо.

Алгоритм формирования списка с помощью данного порядка:

  1. Первого заказ всегда правый поворот (список «R)
  2. следующего порядка предыдущего порядок плюс элемент (список» R) плюс предыдущий порядок, где средний символ заменен на «L.

Таким образом, второй порядок будет (список «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

Буквальный перевод текста дает:

(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).

+0

Благодарим за помощь! Я выполнил реализацию «replace-middle-with-L». Мне нужно получить индексную позицию среднего элемента и построить старый список до этого среднего элемента. Затем я должен добавить (список «L»). Затем я должен добавить все, что находится за этим средним элементом. Но как мне сделать этот последний шаг? – xEscape

+0

@xEscape Читайте о 'split-at' (предпочитаете) или' take' и 'drop'. –