When I hear "functional", I usually interpret it to mean languages influenced or derived from the ML family of languages. Notable features of these languages include algebraic data types, match expressions, emphasis on monadic operations (fold, scan, map, etc), support for TCO, and a expressive static type system (though unfortunately not necessarily supported higher kinds), and a discouragement of mutations.
Common Lisp doesn't really emphasize any of those things, and Scheme only a couple.
F#, Standard ML, Caml Light and Objective Caml would fail that bullet point list.
Scala has partial TCO, surely not cross recursive calls like Scheme language standard requires and how it is defined from CS point of view.
Same applies to F#, because neither JVM nor CLR have direct support for TCO.
It's also usually untyped, and I think the hard to write bad functional code line is mostly true of statically typed pure functional code.