Presentation is loading. Please wait.

Presentation is loading. Please wait.

מבוא מורחב למדעי המחשב בשפת Scheme תרגול 6. 2 List Utilities Scheme built-in procedures –(list x y z...) –(list-ref lst index) –(length lst) –(append.

Similar presentations


Presentation on theme: "מבוא מורחב למדעי המחשב בשפת Scheme תרגול 6. 2 List Utilities Scheme built-in procedures –(list x y z...) –(list-ref lst index) –(length lst) –(append."— Presentation transcript:

1 מבוא מורחב למדעי המחשב בשפת Scheme תרגול 6

2 2 List Utilities Scheme built-in procedures –(list x y z...) –(list-ref lst index) –(length lst) –(append lst1 lst2) Built-in append can take any number of lists –(map proc lst) Built in map can take any number of lists, and a multi-variable procedure

3 3 More Utilities Non built-in procedures –(enumerate-interval from to) Sometimes named integers-between –(filter pred lst) –(accumulate op init lst) Return value for empty list (lambda (x y) ) x – list element y – accumulated result for rest of list - update y with new element x

4 4 accumulate (define (accumulate proc init lst) (if (null? lst) init (proc (car lst) (accumulate proc init (cdr lst))))) (accumulate + 0 (list 1 2 3 4 5)) (accumulate * 1 (list 1 2 3 4)) (accumulate cons null (list 1 2 3)) (accumulate append null (list (list 1 2) (list 3 4) (list 5))) 15 24 (1 2 3) (1 2 3 4 5)

5 5 Eight-Queen Puzzle

6 6 Solving the puzzle Input: board size Output: list of solutions Need to determine: –Algorithm –Board abstraction –Putting it together

7 7 Queen Algorithm Observation: One queen in each column Placing k queens on k columns: –Find all solutions for k-1 –For each partial solution, add a column Enumerating over all column positions for new queen –Remove illegal solutions

8 8 Example

9 9 Add a queen (adjoin-position new-row partial-solution) Add column with queen Queen’s position in column Partial solution Implementation depends on board abstraction

10 10 In every row (define (extend-solution partial-solution) (map (lambda (new-row) (adjoin-position new-row partial-solution)) (enumerate-interval 1 board-size)) Adjoin partial solution To every possible row

11 11 Everything else (define (queens board-size);; Main procedure (define (extend-solution partial-solution) (map (lambda (new-row) (adjoin-position new-row partial-solution)) (enumerate-interval 1 board-size))) (define (queen-cols k) (if (= k 0) (list empty-board) (filter (accumulate (map extend-solution ()))))) (queen-cols board-size)) ;; Initial call

12 12 Everything else (define (queens board-size);; Main procedure (define (extend-solution partial-solution) (map (lambda (new-row) (adjoin-position new-row partial-solution)) (enumerate-interval 1 board-size))) (define (queen-cols k) (if (= k 0) (list empty-board) (filter safe? (accumulate append null (map extend-solution (queen-cols (- k 1))))))) (queen-cols board-size)) ;; Initial call

13 13 Board Abstraction List of queen positions Don’t represent empty columns Add next queen to the left Tailored to the algorithm’s needs –Can’t represent other board settings

14 14 Basic features (define empty-board null) (define (adjoin-position new-row rest-of-board) (cons new-row rest-of-board)) (define (first-position board) (car board)) (define (rest-positions board) (cdr board)) (define (empty? board) (null? board))

15 15 The safe? predicate Check only the leftmost queen –Rest of board was verified before Compare to every other queen: –Different row –Different diagonals

16 16 Possible Implementation (define (safe? positions) (define (verify first rest shift) (or (empty? rest) (let ((second (first-position rest))) (and (not (= first second)) (not (= first (+ second shift))) (not (= first (- second shift))) (verify first (rest-positions rest) (+ shift 1)))))) (verify (first-position positions) (rest-positions positions) 1))


Download ppt "מבוא מורחב למדעי המחשב בשפת Scheme תרגול 6. 2 List Utilities Scheme built-in procedures –(list x y z...) –(list-ref lst index) –(length lst) –(append."

Similar presentations


Ads by Google