If I do this I get the results I need for (procedure-arity (select-random-safe-function)), but when I call (safe-function-set) or (select-random-safe-function) or any other function that returns a safe function I get for example:
>(safe-function-set) '(#<procedure:$+> #<procedure:$-> #<procedure:$*> #<procedure:$/>) >(select-random-safe-function) #<procedure:$-> whereas when it was defined using quote as opposed to list I get: >(safe-function-set) '($+ $- $* $/) >(select-random-safe-function) '$- *How would I get rid of this #<procedure:$-> part for readability, keeping only the $- part which is the actual function I defined, while still keeping it a function/procedure that gives me the function arity using (procedure-arity (select-random-safe-function))?* Best, On Fri, Jan 3, 2014 at 5:31 PM, Sam Tobin-Hochstadt <sa...@cs.indiana.edu>wrote: > Try replacing `safe-function-set` with: > > (define safe-function-set (list $+ $- $* $/)) > > Sam > > On Fri, Jan 3, 2014 at 5:28 PM, Rian Shams <rian.sh...@gmail.com> wrote: > > Hello, > > > > I am working with functions that I have defined to only take 1 or 2 > operands > > (called safe-functions) for the implementation of a genetic program. > > > > (define ($+ augend addend) ;operation is addition > > (+ augend addend)) ; the result is the sum > > (define ($- minuend subtrahend) ;operation is subtraction > > (- minuend subtrahend)) ;result is difference > > (define ($* multiplicand multiplier) ;operation is multiplication > > (* multiplicand multiplier)) ;result is product > > (define ($/ dividend divisor) ;operation is division > > (/ dividend divisor)) ;result is quotient > > > > (define (infinity? x) (or (eq? x +Inf.0) (eq? x -Inf.0))) > > (define ($sin x) (if (infinity? x) (* (sgn x) +Inf.0) (sin x))) > > (define ($cos x) (if (infinity? x) (* (sgn x) +Inf.0) (cos x))) > > > > (define safe-function-set > > '($+ > > $- > > $* > > $/ > > ;$sin > > ;$cos)) > > > > (define (select-random-safe-function) > > (list-ref safe-function-set (random (length safe-function-set)))) > > > > I would like to use procedure-arity (or a similar function) to determine > the > > arity of a randomly selected safe function but I get this error: > > > >>(procedure-arity (select-random-safe-function)) > > error: procedure-arity: contract violation > > expected: procedure? > > given: '$+ > > > > I think the problem is that the safe-functions are passed to > procedure-arity > > quoted. Is there a way I can unquote the functions, or adjust > > procedure-arity to make (procedure-arity (select-random-safe-function)) > > work? > > > > Thanks, > > -- > > Rian Shams > > > > ____________________ > > Racket Users list: > > http://lists.racket-lang.org/users > > > -- Rian Shams
____________________ Racket Users list: http://lists.racket-lang.org/users