首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何判断变量的值是否是绑定到Scheme中的过程的符号?

如何判断变量的值是否是绑定到Scheme中的过程的符号?
EN

Stack Overflow用户
提问于 2009-09-21 09:22:01
回答 2查看 1.1K关注 0票数 3

我熟悉Common Lisp,并试图学习一些Scheme,所以我一直在尝试了解如何使用Scheme来处理我通常用Common Lisp编写的代码。

在Common Lisp中有fboundp,它告诉我一个符号(变量的值)是否绑定到一个函数。所以,我会这样做:

代码语言:javascript
复制
(let ((s (read)))
  (if (fboundp s)
      (apply (symbol-function s) args)
      (error ...)))

在Scheme中这是可能的吗?我一直试图在R6RS规范中找到这一点,但找不到任何类似的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-21 09:33:53

这边请?

检查结果是否为symbol

  • evaluate符号,使用EVAL获取其值

  • 检查结果是否为PROCEDURE?

的过程

票数 5
EN

Stack Overflow用户

发布于 2009-09-21 09:34:42

在Scheme中,函数不像在Common Lisp中那样绑定到符号。如果你需要知道一个值是否真的是一个过程,你可以使用procedure?谓词:

代码语言:javascript
复制
(if (procedure? s) (do-something-with s) (do-something-else))

在可移植的Scheme中没有直接的方法来实现你的示例代码想要做的事情,因为Scheme中的符号只是一种统一的字符串,缺少Common Lisp的value/function/plist插槽。

您可以尝试如下所示:

代码语言:javascript
复制
(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))

也就是说,定义你自己的“好”函数映射。这样做的好处是,您可以将函数集限制为仅“安全”的函数,或者其他任何函数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1453588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档