4 기사 문제에 3x3 체스 판을 얻으려고합니다. 여기에 라켓 언어DrRacket의 오류를 이해할 수 없습니다
#lang racket
(define N 3)
(define nexts ; construct the graph
(let ([ds (for*/list ([x 2] [x* '(+1 -1)] [y* '(+1 -1)])
(cons (* x* (+ 1 x)) (* y* (- 2 x))))])
(for*/vector ([i N] [j N])
(filter values (for/list ([d ds])
(let ([i (+ i (car d))] [j (+ j (cdr d))])
(and (< -1 i N) (< -1 j N) (+ j (* N i)))))))))
(define (tour x y)
(define xy (+ x (* N y)))
(let loop ([seen (list xy)] [ns (vector-ref nexts xy)] [n (sub1 (* N N))])
(if (zero? n) (reverse seen)
(for/or ([next (sort (map (λ(n) (cons n (remq* seen (vector-ref nexts n)))) ns)
< #:key length #:cache-keys? #t)])
(loop (cons (car next) seen) (cdr next) (sub1 n))))))
(define (draw tour)
(define v (make-vector (* N N)))
(for ([n tour] [i (in-naturals 1)]) (vector-set! v n i))
(for ([i N])
(displayln (string-join (for/list ([j (in-range i (* N N) N)])
(~a (vector-ref v j) #:width 2 #:align 'right))
" "))))
(draw (tour (random N) (random N)))
의 코드가있다 그리고 그것은 나에게이 오류 for: expected a sequence for n, got something else: #f
와 하이라이트 내 코드 섹션 제공 :
(define (draw tour)
(define v (make-vector (* N N)))
(for ([n tour] [i (in-naturals 1)]) (vector-set! v n i))
(for ([i N])
(displayln (string-join (for/list ([j (in-range i (* N N) N)])
(~a (vector-ref v j) #:width 2 #:align 'right))
" "))))
을 그리고 나는 문제가 무엇인지 확실하지 않다. 이것은 수업 시간이며 나는 라켓 언어에 익숙하지 않습니다. 어떤 도움을 주시면 감사하겠습니다. 감사합니다
는
무작위로 생성되기 때문에 첫 번째 요소가 있어야할지 모르겠습니다. N을 4보다 큰 숫자로 변경하면 작동하지 만 3이 작동해야합니다. – butimnotarapper
@butimnotarapper 답변을 업데이트했습니다. 3x3 및 4x4 보드의 시작 위치에 대한 솔루션을 찾을 수 없기 때문에 해결책을 찾지 못할 것입니다. – Sylwester