[racket] racket newbie question on quoting and the built in procedure-arity function

From: Sam Tobin-Hochstadt (samth at cs.indiana.edu)
Date: Fri Jan 3 17:31:08 EST 2014

Try replacing `safe-function-set` with:

(define safe-function-set (list $+ $- $* $/))

Sam

On Fri, Jan 3, 2014 at 5:28 PM, Rian Shams <rian.shams at 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
>

Posted on the users mailing list.