В Схеме функции не привязаны к символам, как в Common Lisp. Если вам нужно знать, является ли значение процедурой, вы можете использовать предикат procedure?
:
(if (procedure? s) (do-something-with s) (do-something-else))
В переносимой Схеме нет прямого способа достичь того, что хочет сделать ваш пример кода, поскольку символы в Схеме - это просто некие унифицированные строки, в которых отсутствуют слоты value / function / plist Common Lisp.
Вы можете попробовать что-то вроде:
(define function-table (list `(car ,car) `(cdr ,cdr) `(cons ,cons) `(display ,display)))
(let* ((s (read))
(f (cond ((assq s function-table) => cadr)
(else (error "undefined function")))))
(apply f args))
То есть, определяя ваше собственное отображение "хороших" функций. Это дает преимущество в том, что вы можете ограничить набор функций только «безопасными» или какими-либо другими.