Path: utzoo!utgpu!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!rutgers!njin!princeton!phoenix!eliot From: eliot@phoenix.Princeton.EDU (Eliot Handelman) Newsgroups: comp.lang.lisp Subject: functionp, fboundp (was: Re: Survey question) Keywords: reader,type Message-ID: <4593@phoenix.Princeton.EDU> Date: 26 Nov 88 20:28:08 GMT References: <26250@bu-cs.BU.EDU> <3320@mit-amt> Reply-To: eliot@phoenix.Princeton.EDU (Eliot Handelman) Organization: Princeton University, NJ Lines: 25 In article <3320@mit-amt> sokolov@media-lab.media.mit.edu (Michael Sokolov) writes: >>(setq foo (read)) >>(lambda (x) x) > I think the question was what type of object is foo bound to? >I think it is basically just a list. (fboundp 'foo) returns nil. Since READ doesn't call EVAL it is just returning a cons. If you need to have the arguments evaled then you have to write (eval (read)). That would cause an error in the above example, since LAMBDA is not a function. >however, (funcall foo 1) does return 1. Accordingly, (functionp foo) >returns t. I discovered that (functionp 'bar) also returns t, in spite >of the fact that bar was previously unbound: anyone know why? FUNCTIONP only says whether its argument is suitable to passed to FUNCALL, which is true of all symbols. If you want to find out if a symbol has a global function definition attached to it you have to use FBOUNDP. There was some discussion a while back -- though I think it may have been in the KCl list -- as to what the point of FUNCTIONP was. I think it was generally agreed that it was pretty pointless. I don't recall whether X3J13 was planning on rethinking it or not -- perhaps someone from there might fill us in on the latest update.