【发布时间】:2015-09-20 01:12:26
【问题描述】:
这是我的翻译任务的一部分。
当调用以下内容时:
(evaluate (sp-assign "y" (sp-val 18)) (hash "x" 42))
我正在尝试得到这个结果:
'(18 . #hash(("y" . 18) ("x" . 42)))
这是我的相关代码:
(define empty-env (hash))
(struct sp-var (varname))
(struct sp-assign (var exp))
(define (evaluate prog env)
(match prog
[(struct sp-val (v)) (cons v env)]
[(struct sp-assign (var exp)) (eval-assign var exp env)]
[(struct sp-var (varname)) (cons (hash-ref env varname) env)]
[_ (error "Unrecognized expression")]))
(define (eval-assign var exp env)
evaluate (sp-var var) (hash var (evaluate exp env))) ;'((18 . #hash(("x" . 42))) . #hash(("y" . (18 . #hash(("x" . 42))))))
;var (hash var (evaluate exp env)) ;var (hash var (evaluate exp env))
)
我得到的结果分别在我在函数中的两次尝试旁边(我做了更多的尝试,但这些是我得到的最接近实际结果的结果) .有人可以帮我一把,让我知道我的逻辑哪里出了问题?
编辑:通过以下 eval-assign 实现,我能够更接近我的目标:
(list (car(evaluate exp env))(hash var (car(evaluate exp env))) env)
产生:
'(18 #hash(("y" . 18)) #hash(("x" . 42)))
但我仍然被一个额外的哈希卡住了......
【问题讨论】: