Cognitive Science Lectures
Genetic Algorithms
Second LISP Sketch of a Program for Dobby
;--------------------------------------------------------------
; general information
;
; file:  dobby.l of clos of lisp of ai
; type:  pcl
; line:  dobby, as in Harry Potter #2
; date:  Spring 1999


  ( in-package "PCL" )

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;
; THE CODE (APPROPRIATELY MODIFIED) FROM CHALLENGE #1 
; MUST APPEAR HERE

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
; Code to generate a random program to govern a Dobby step.

  ( defun generate ( &aux rn )
    ( setf rn ( random-low-high 1 3 ) )
    ( cond
      ( ( = rn 1 ) ( generate-action ) )
      ( ( = rn 2 ) ( generate-probe ) )
      ( ( = rn 3 ) ( generate-function ) )
    )
  )
  
  ( defun generate-action (  &aux rn )
    ( setf rn ( random-low-high 1 4 ) )
    ( cond
      ( ( = rn 1 ) '(north) )
      ( ( = rn 2 ) '(south) )
      ( ( = rn 3 ) '(east) )
      ( ( = rn 4 ) '(west) )
    )
  )
  
  ( defun generate-probe ( &aux rn )
    ( setf rn ( random-low-high 1 8 ) )
    ( cond
      ( ( = rn 1 ) '(n) )
      ( ( = rn 2 ) '(ne) )
      ( ( = rn 3 ) '(e) )
      ( ( = rn 4 ) '(se) )
      ( ( = rn 5 ) '(s) )
      ( ( = rn 6 ) '(sw) )    
      ( ( = rn 7 ) '(w) )
      ( ( = rn 8 ) '(nw) )
    )
  )

  ( defun generate-function ( &aux rn )
    ( setf rn ( random-low-high 1 4 ) )
    ( cond
      ( ( = rn 1 ) ( generate-or ) )
      ( ( = rn 2 ) ( generate-and ) )
      ( ( = rn 3 ) ( generate-not ) )
      ( ( = rn 4 ) ( generate-if ) )
    )
  )
  
  ( defun generate-or ()
    ( list 'or ( generate ) ( generate ) )
  )
  
  ( defun generate-and ()
    ( list 'and ( generate ) ( generate ) )
  )
  
  ( defun generate-not ()
    ( list 'not ( generate ) ( generate ) )
  )
  
  ( defun generate-if ()
    ( list 'if ( generate ) ( generate ) ( generate ) )
  )