SICP 习题2.42 八皇后问题
2016-07-01 00:24
134 查看
想不到第一次写八皇后问题是用的scm
写代码的途中遇到一个错误,用let错了,用define对了,应该是编译器的原因,和nil差不多。
(define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) (define (enumerate-interval low high) (if (> low high) '() (cons low (enumerate-interval (+ low 1) high)))) (define (fliter predicate sequence) (cond ((null? sequence) '()) ((predicate (car sequence)) (cons (car sequence) (fliter predicate (cdr sequence)))) (else (fliter predicate (cdr sequence))))) (define (flatmap proc seq) (accumulate append '() (map proc seq))) (define (queens board-size) (define (queen-cols k) (if (= k 0) (list empty-board) (fliter (lambda (positions) (safe? k positions)) (flatmap (lambda (rest-of-queens) (map (lambda (new-row) (adjoin-position new-row k rest-of-queens)) (enumerate-interval 1 board-size))) (queen-cols (- k 1)))))) (queen-cols board-size)) (define empty-board '(nil)) (define (adjoin-position new-row k rest-of-queens) (append (list (list new-row k)) rest-of-queens)) (define (vec positions) (define nl newline) (nl) (display positions) (nl) (display (car positions)) (nl) (display (cadr positions))) (define (safe? k positions) ;(if (= k 2) (vec positions)) (define (iter i Mat) ;(newline) ;(display i) ;(if (= i 2) ; (display (cmp (car positions) (cadr Mat)))) (if (= i 1) #t (if (cmp (car positions) (cadr Mat)) (iter (- i 1) (cdr Mat)) #f))) (define (cmp a1 a2) (define x1 (car a1)) (define y1 (cadr a1)) (define x2 (car a2)) (define y2 (cadr a2)) (not (or (= x1 x2) (= y1 y2) (= (- x2 x1) (- y2 y1)) (= (- x1 x2) (- y2 y1))))) (iter k positions)) (newline) (display (queens 8))
相关文章推荐
- javascript递归回溯法解八皇后问题
- 八皇后问题的相关C++代码解答示例
- C++实现八皇后问题的方法
- java实现八皇后问题示例分享
- python 示例分享---逻辑推理编程解决八皇后
- python基于右递归解决八皇后问题的方法
- 一维数组实现八皇后问题
- 2754:八皇后
- 八皇后问题的回朔法求解
- 递归学习:N皇后 [暨接受六神指点后感]
- n皇后问题
- leetcode N-Queens & N-Queens II
- `## 八皇后的判断 ###
- 八皇后问题
- [递归经典题目]八皇后问题
- 从八皇后问题到回溯法
- 第1次实验——NPC问题(回溯算法、聚类分析)
- Introduction to Java Programming编程题6.20<经典八皇后难题>
- 八皇后算法