Scheme 添加对新表达式方案语言的支持

Scheme 添加对新表达式方案语言的支持,scheme,lisp,common-lisp,racket,sicp,Scheme,Lisp,Common Lisp,Racket,Sicp,我是新来的。我很快就会有一个测试,一个测试语言计划,我正在为它做准备 我有一个问题,我试图解决了几个小时,但甚至不知道如何开始它 问题是这样的: 这种形式有一种新的表达方式: (获取过程体) 此表达式接收单个表达式作为参数,对其求值,如果获得用户过程类型值,则返回 她的身体 方案语言中的问题 大家好,我是新来的。我马上就要考试了,语言考试,我正在准备。 我有一个问题,我试图解决了几个小时,但甚至不知道如何开始它 问题是这样的: 这种形式有一种新的表达方式: 此表达式接收单个表达式作为参数,对其求

我是新来的。我很快就会有一个测试,一个测试语言计划,我正在为它做准备

我有一个问题,我试图解决了几个小时,但甚至不知道如何开始它

问题是这样的:

这种形式有一种新的表达方式:

(获取过程体)

此表达式接收单个表达式作为参数,对其求值,如果获得用户过程类型值,则返回 她的身体

方案语言中的问题

大家好,我是新来的。我马上就要考试了,语言考试,我正在准备。 我有一个问题,我试图解决了几个小时,但甚至不知道如何开始它

问题是这样的: 这种形式有一种新的表达方式:

此表达式接收单个表达式作为参数,对其求值,如果获得用户过程类型值,则返回 她的身体

以下是重估后可能出现的情况:

  • 如果返回的值是用户过程,则必须返回其主体
  • 如果返回值是基元过程-“Hidden Implementation!primitive”
  • 如果该值不是过程,请打印“过程非:错误”
功能操作的可能输出:

(get-procedure-body f)
> ((display x) (* x y))
(get-procedure-body (lambda (x) (h x)) )
> ((h x))
(get-procedure-body +)
> “primitive! Implementation hidden”
(get-procedure-body 1)
> “error: non-procedure”
(get-procedure-body (+ 1 1))
> “error: non-procedure”
问题是这样的:

添加对主体过程get表达式作为内核表达式的支持(写入所有必需的更改)

如果至少有人能帮助我,我会很高兴,我试着解释我自己,如果有什么不清楚,告诉我,我会解释更多。这对我来说是很难的语言,特别是因为它没有太多的支持


我甚至不知道该怎么办。

获取过程主体不是Scheme的一部分,也不是常见的Lisp标准,但是如果您制作了Scheme解释器(
eval
)有了对用户过程的支持,您最有可能在所选的数据结构中有问题的代码,并且使非标准原语
get procedure body
将从宿主语言中公开相同的过程。例如,SICP一书中确实有一些命名非常类似的东西作为其解释器的一部分

至于使用球拍,我曾经做过这样的事情,以便能够做类似的事情:

#朗球拍
(结构程序(src obj)
#:属性属性:过程
(结构字段索引obj)
#:透明
#:方法gen:自定义写入
[(定义(写入进程x端口模式)
((案例模式)
[(t)写]
[(#f)显示]
[其他漂亮的印刷品])
(程序src x)
端口号])
(定义语法lambda)*
(语法规则()
(其余)
(程序(lambda*.rest)(lambda.rest()()))
(定义测试(λ*(xy)(+xy)))
test;==>#(结构:闭包(lambda*(xy)(+xy))#)
(过程src测试);==>(λ*(xy)(+xy))
(过程obj测试);=>#
((proc obj测试)1 2);=>3
(测试12);==>3

现在这个解决方案将问题颠倒过来。因为我没有办法从系统中获取源代码,所以我使用语法将源代码存储在过程对象旁边,并使用结构特性来打包这些源代码。作为一个过程,使用
lambda*
将与
lambda
的工作原理相同,但内省除外。

听起来好像这个问题是在一个特定的口译员的上下文中。你有文本的链接吗,在哪里描述的?@soegaard谢谢你的帮助,这就是我的全部。好的,你在看什么书/课程材料?SICP?EoPL?或其他什么。@soegaard book SicptHank非常感谢你的帮助,你能告诉我它在SICP book中的什么地方吗?@masterHaham.查找
应用
和“表示程序”