首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Scheme中正确查找链表元素?

如何在Scheme中正确查找链表元素?
EN

Stack Overflow用户
提问于 2011-11-02 09:57:06
回答 1查看 422关注 0票数 0

我想评估以下几点:(eval-expr '(times x x) '((x ((plus y x) ((x 2) (y 3))))))

这是一个懒惰的评估使用方案。我一直收到以下错误:

mcar: expects argument of type ; given 3

总体答案是25,但您必须通过获取(plus y x)的值并将其分配给环境的头部来实现此目的。(plus y x)是上面表达式的caadr,环境是cadadr。我不确定我做错了什么,代码看起来是对的。

第4行处理这种情况。

代码语言:javascript
运行
复制
(define (eval-expr E env)
  (cond
   ((eqv? (car E) 'plus) (apply + (eval-params (cdr E) env)))
   ((eqv? (car E) 'times) (apply * (eval-params (cdr E) env)))
   ((eqv? (car E) 'divide) (apply / (eval-params (cdr E) env)))
   ((eqv? (car E) 'minus) (apply - (eval-params (cdr E) env)))
   (else '()))) ;  confused - return  ()

(define (eval-params E env)
  (if (null? E) '()
      (cons (eval-expr (car E) env)
            (eval-params (cdr E) env))))
EN

回答 1

Stack Overflow用户

发布于 2011-11-04 02:34:35

根据您的评论,看起来您正在实现一种懒惰语言,其中环境包含promise,当评估promise时,您应该改变环境以包含新值。

我的建议:设计几个helper函数。首先:一个函数,它接受一个表示变量名和环境的符号,并返回该变量的值,其副作用是改变环境以包含更新后的绑定。在这种情况下,您可能需要另一个辅助函数,该函数接受单个绑定,计算其右侧的值,然后对其进行修改以包含新值。

务必彻底测试这些帮助器函数。

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

https://stackoverflow.com/questions/7975006

复制
相关文章

相似问题

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