Thank you, this solved the issues I was having as far as I can tell.

Now I can focus on getting rest of my chess engine working properly.

Timo

Jason Wolfe <jawo...@berkeley.edu> writes:

> You're looking for "apply".
>
> user2> (max 1 2 3)
> 3
> user2> (max [1 2 3])
> [1 2 3]
> user2> (apply max [1 2 3])
> 3
>
> -Jason
>
> On Dec 4, 3:30 am, zmyrgel <timo.my...@gmail.com> wrote:
>> I'm trying to make a functional version of minmax algorithm as shown
>> in John Hughes Why functional programming matters? work 
>> [http://www.scribd.com/doc/26902/whyfp].
>>
>> I'm hitting problems when applying maximise function on my gametree.
>> For some reason the maximise call won't return the best value the
>> position can get but a nested list of numbers. Like the call to min/
>> max functions is not done at all. The results nesting depends on the
>> given search depth. For depth 2 it returns list of list of numbers.
>>
>> What am I doing wrong here? As far as I know the maximise / minimise
>> functions should return one integer, not a list in any case?
>>
>> Here's my version of the maximise / minimise functions, haskell
>> version in comments:
>> ;; maximise (node n nil) = n
>> ;; maximise (node n sub) = max (map minimise sub)
>> (declare minimise)
>> (defn- maximise [node]
>>     (if (empty? (:subtree node))
>>       (:label node)
>>       (max (map minimise (:subtree node)))))
>>
>> ;; minimise (node n nil) = n
>> ;; minimise (node n sub) = min (map maximise sub)
>> (defn- minimise [node]
>>       (if (empty? (:subtree node))
>>         (:label node)
>>         (min (map maximise (:subtree node)))))
>>
>> ;; evaluate = maximise . maptree static . prune 5 . gametree
>> (defn evaluate-minmax [depth state]
>>   (do (println "###")
>>       (print "EVALUATE-MINMAX[depth state]:")
>>       (prn depth state)
>>       (println "###")
>>       (let [tree (->> state
>>                       gametree
>>                       (prune depth)
>>                       (maptree static))]
>>         (do (println "###")
>>             (print "Calling maximise on tree:")
>>             (prn tree)
>>             (println "###")
>>             (maximise tree)))))
>>
>> ###  And output of the maximise call ###
>>
>> ###
>> Calling maximise on tree:#:tursas.search2.Node{:label 21, :subtree
>> (#:tursas.search2.Node{:label 79, :subtree
>> (#:tursas.search2.Node{:label 4, :subtree nil}
>> #:tursas.search2.Node{:label 76, :subtree nil}
>> #:tursas.search2.Node{:label 82, :subtree nil}
>> #:tursas.search2.Node{:label 82, :subtree nil}
>> #:tursas.search2.Node{:label 67, :subtree nil}
>> #:tursas.search2.Node{:label 30, :subtree nil}
>> #:tursas.search2.Node{:label 94, :subtree nil}
>> #:tursas.search2.Node{:label 70, :subtree nil}
>> #:tursas.search2.Node{:label 82, :subtree nil}
>> #:tursas.search2.Node{:label 84, :subtree nil}
>> #:tursas.search2.Node{:label 54, :subtree nil}
>> #:tursas.search2.Node{:label 29, :subtree nil})}
>> #:tursas.search2.Node{:label 8, :subtree (#:tursas.search2.Node{:label
>> 38, :subtree nil} #:tursas.search2.Node{:label 47, :subtree nil}
>> #:tursas.search2.Node{:label 65, :subtree nil}
>> #:tursas.search2.Node{:label 32, :subtree nil}
>> #:tursas.search2.Node{:label 88, :subtree nil}
>> #:tursas.search2.Node{:label 20, :subtree nil}
>> #:tursas.search2.Node{:label 21, :subtree nil}
>> #:tursas.search2.Node{:label 37, :subtree nil}
>> #:tursas.search2.Node{:label 93, :subtree nil}
>> #:tursas.search2.Node{:label 88, :subtree nil}
>> #:tursas.search2.Node{:label 78, :subtree nil}
>> #:tursas.search2.Node{:label 66, :subtree nil})}
>> #:tursas.search2.Node{:label 34, :subtree
>> (#:tursas.search2.Node{:label 42, :subtree nil}
>> #:tursas.search2.Node{:label 56, :subtree nil}
>> #:tursas.search2.Node{:label 72, :subtree nil}
>> #:tursas.search2.Node{:label 55, :subtree nil}
>> #:tursas.search2.Node{:label 29, :subtree nil}
>> #:tursas.search2.Node{:label 79, :subtree nil}
>> #:tursas.search2.Node{:label 86, :subtree nil}
>> #:tursas.search2.Node{:label 30, :subtree nil}
>> #:tursas.search2.Node{:label 74, :subtree nil}
>> #:tursas.search2.Node{:label 87, :subtree nil}
>> #:tursas.search2.Node{:label 58, :subtree nil}
>> #:tursas.search2.Node{:label 84, :subtree nil})}
>> #:tursas.search2.Node{:label 78, :subtree
>> (#:tursas.search2.Node{:label 69, :subtree nil}
>> #:tursas.search2.Node{:label 41, :subtree nil}
>> #:tursas.search2.Node{:label 69, :subtree nil}
>> #:tursas.search2.Node{:label 34, :subtree nil}
>> #:tursas.search2.Node{:label 30, :subtree nil}
>> #:tursas.search2.Node{:label 42, :subtree nil}
>> #:tursas.search2.Node{:label 12, :subtree nil}
>> #:tursas.search2.Node{:label 34, :subtree nil}
>> #:tursas.search2.Node{:label 22, :subtree nil}
>> #:tursas.search2.Node{:label 46, :subtree nil}
>> #:tursas.search2.Node{:label 67, :subtree nil}
>> #:tursas.search2.Node{:label 16, :subtree nil})}
>> #:tursas.search2.Node{:label 61, :subtree
>> (#:tursas.search2.Node{:label 52, :subtree nil}
>> #:tursas.search2.Node{:label 84, :subtree nil}
>> #:tursas.search2.Node{:label 84, :subtree nil}
>> #:tursas.search2.Node{:label 65, :subtree nil}
>> #:tursas.search2.Node{:label 30, :subtree nil}
>> #:tursas.search2.Node{:label 75, :subtree nil}
>> #:tursas.search2.Node{:label 57, :subtree nil}
>> #:tursas.search2.Node{:label 87, :subtree nil}
>> #:tursas.search2.Node{:label 96, :subtree nil})}
>> #:tursas.search2.Node{:label 39, :subtree
>> (#:tursas.search2.Node{:label 39, :subtree nil}
>> #:tursas.search2.Node{:label 34, :subtree nil}
>> #:tursas.search2.Node{:label 77, :subtree nil}
>> #:tursas.search2.Node{:label 56, :subtree nil}
>> #:tursas.search2.Node{:label 30, :subtree nil}
>> #:tursas.search2.Node{:label 16, :subtree nil}
>> #:tursas.search2.Node{:label 95, :subtree nil}
>> #:tursas.search2.Node{:label 96, :subtree nil}
>> #:tursas.search2.Node{:label 84, :subtree nil}
>> #:tursas.search2.Node{:label 51, :subtree nil}
>> #:tursas.search2.Node{:label 58, :subtree nil}
>> #:tursas.search2.Node{:label 94, :subtree nil})})}
>> ###
>> ((4 76 82 82 67 30 94 70 82 84 54 29) (38 47 65 32 88 20 21 37 93 88
>> 78 66) (42 56 72 55 29 79 86 30 74 87 58 84) (69 41 69 34 30 42 12 34
>> 22 46 67 16) (52 84 84 65 30 75 57 87 96) (39 34 77 56 30 16 95 96 84
>> 51 58 94))

-- 
Timo Myyrä                . O .
http://www.wickedbsd.net  . . O
timo.my...@wickedbsd.net  O O O

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to