标签: evaluator

在SECD机器中,"说唱"如何工作?

我正在按照维基百科上描述在C#中编写SECD机器模拟器.我已完成基本操作,但我不确定如何实现该指令.rap

在维基百科,它说rap:

rap像ap一样工作,只是它用当前的一个替换了虚拟环境的出现,从而使递归函数成为可能

因为ap它说:

ap弹出一个闭包和堆栈中的参数值列表.闭包通过将其环境安装为当前参数来应用于参数,将参数列表推到前面,清除堆栈,并将C设置为闭包的函数指针.先前的S,E值和C的下一个值保存在转储中.

这是我的实施 ap

    public void ap() 
    { 
        Push(S, ref D); 
        Push(E, ref D); 
        Push(C, ref D); 
        List closure = Pop(ref S);
        List paramlist = Pop(ref S);
        E = closure.Tail;
        Push(paramlist, ref E);
        C = closure.Head;
        S = List.Nil;
    }
Run Code Online (Sandbox Code Playgroud)

请注意,这List是我对Lisp样式"cons"单元格的实现.

令我困惑的是,究竟有何rap不同ap?例如,环境寄存器(E)究竟发生了什么?我发现维基百科的定义有点含糊不清,并且找不到任何能够解释它的东西.

functional-programming evaluator abstract-machine

7
推荐指数
1
解决办法
1203
查看次数

我可以在评估模式下运行Lua解释器吗?

许多脚本解释器喜欢irbnode作为评估者工作.如果我执行此代码,

10
Run Code Online (Sandbox Code Playgroud)

它将评估并打印值本身,并且不会出错.

当我安装lua它时,它作为执行者而不是评估者.所以当我放10,它会出错.

我可以让Lua解释器作为评估者工作吗?

lua interpreter evaluator

2
推荐指数
2
解决办法
192
查看次数

尝试调用未绑定的fn,而我已定义它

我正在尝试将SICP的元循环评估程序转换为Clojure.在setup-environment调用extend-environment不编译因为我收到错误"尝试调用未绑定的fn".这是代码的一部分:

(... loads of methods for creating and managing environment list)

(def primitive-procedures
  (list (list 'car first)
        (list 'cdr rest)
        (list 'cons conj) ;; TODO: reverse
        (list 'null? nil?)
        (list 'list list)
        (list '+ +)
        (list '- -)
        (list '* *)
        (list '/ /)
        ;;      more primitives
        ))

(def primitive-procedure-names 
  #(map [first
         primitive-procedures]))

(def primitive-procedure-objects 
  (fn [] (map (fn [p] (list 'primitive (second p)))
               primitive-procedures)))

(def the-empty-environment '())

(defn extend-environment [vars vals base-env]
  (if …
Run Code Online (Sandbox Code Playgroud)

scheme clojure sicp evaluator metacircular

2
推荐指数
1
解决办法
3250
查看次数

Racket博士中Scheme的Metacircular评估器

当我尝试在 Dr. Racket 中运行评估器时,它显示错误:“模块语言:定义窗口中只能有一个表达式”。

显然这个窗口中有多个定义,一个评估器有多个定义,那么我如何运行这些多个定义?或者是否有任何其他方法来运行评估器。

任何帮助,将不胜感激。

scheme evaluator racket metacircular

2
推荐指数
1
解决办法
5364
查看次数

OCaml/ML中的评估员

type bool_exp =
    TT
  | FF
  | Var of string
  | And of bool_exp * bool_exp
  | Not of bool_exp ;;

 eval : bool_exp -> (string -> bool) -> bool
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个名为的求值函数eval.我是OCaml的新手并不习惯语法.我在哪里可以写这篇文章?

ocaml ml evaluator

1
推荐指数
1
解决办法
319
查看次数