Thanks Michael, and you are spot on about your observation on parentheses :) but when I wasn't putting (def name-wo-extn "something") in another (), I was getting some error like - too many arguments to def, hence I put one more. I am still getting used to this syntax.
On Jul 1, 3:03 am, Michael Wood <esiot...@gmail.com> wrote: > Hi > > 2009/7/1 mmwaikar <mmwai...@gmail.com>: > > > Hi, > > > I am learning clojure these days, but on .Net. I have the following > > code - > > I only have a tiny bit to add to what Daniel's already said. > > [...] > > > (defn GetSubfolderName [filename] > > ((def name-wo-extn (Path/GetFileNameWithoutExtension filename)) > > First, def creates basically global variables (or something similar). > You want let instead. > Second, you can't just add parentheses as you see fit. :) > > (def name-wo-extn "something") > > is defining name-wo-extn as the string "something". > > ((def name-wo-extn "something")) > > is trying to define name-wo-extn as the string "something" and then > call it as a function. Since "something" is a String and not a > function (or something that acts as a function), this will fail. > > So, for ((def name-wo-extn (Path/GetFileNameWithoutExtension > filename)) ...) implies that (Path/GetFileNameWithoutExtension > filename) returns a Clojure function (or something that can be used as > one, like a map/set/etc.). I suppose Path/GetFileNameWithoutExtension > is a .Net method, in which case it is unlikely to work as a Clojure > function. Java methods can't be used in place of Clojure functions > and I assume it's the same for the .Net port. > > > (def first-char (aget (.ToCharArray (.ToString name-wo-extn)) 0)) > > (if (Char/IsDigit first-char) (Convert/ToInt32 first-char) (if > > (starts-with-hmorx first-char) (.ToLower (.ToString first-char)) > > "other")))) > > > But when I call (GetSubfolderName "D:\\CsEx\\Manoj.cs"), I get this > > exception - > > > System.InvalidCastException: Unable to cast object of type > > 'System.String' to type 'clojure.lang.IDeref'. > > I think the extra parentheses are the reason for this exception. > > > at lambda_method(Closure , Object ) > > at AFunction_impl.invoke(Object ) > > at lambda_method(Closure , Object ) > > at AFunction_impl.invoke(Object ) > > at lambda_method(Closure ) > > at AFunction_impl.invoke() > > at REPLCall(Closure ) > > [...] > > -- > Michael Wood <esiot...@gmail.com> --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---