gpt4 book ai didi

scheme - 在解释器中确定 Scheme 函数的定义和参数?/函数如何存储在 Scheme 中?

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:31 25 4
gpt4 key购买 nike

我想创建一个可以确定方案中任意函数定义的函数。如果我们将这样的函数称为“定义”,它会这样工作:

(define (triple x) (* 3 x))

(definition triple) would return "(triple x) (* 3 x)".

会有一些实现问题(例如 n-arity),但我主要关心的是各个函数的定义是否可以在 Scheme 中轻松检索。

作为延续,有没有办法创建一个可以确定任意函数参数的函数?这样:

(parameters +) 返回 (number number) 或类似的东西。

这些问题都属于函数如何存储在 Scheme 中的问题 - 我发现一些资料声称函数定义与函数名称一起存储,但我无法找出它们究竟是如何存储的。

如果这不可能 - 是否有一种语言可以轻松检索函数定义?

最佳答案

Scheme 中没有这样的东西。不过,个别实现可能会有。

在 Common Lisp 中有标准函数 function-lambda-expression,它可能能够检索源代码 - 取决于实现。

LispWorks 中的示例(此处重新格式化以提高可读性):

CL-USER 65 > (defun triple (x) (* 3 x))
TRIPLE

CL-USER 66 > (function-lambda-expression #'triple)
(LAMBDA (X)
(DECLARE (SYSTEM::SOURCE-LEVEL #<EQ Hash Table{0} 42201D392B>))
(DECLARE (LAMBDA-NAME TRIPLE))
(* 3 X))
NIL
TRIPLE

SBCL:

* (defun triple (x) (* 3 x))

TRIPLE
* (function-lambda-expression #'triple)

(SB-INT:NAMED-LAMBDA TRIPLE
(X)
(BLOCK TRIPLE (* 3 X)))
NIL
TRIPLE

如您所见,它返回三个值:代码、是否为闭包和函数名称。

关于scheme - 在解释器中确定 Scheme 函数的定义和参数?/函数如何存储在 Scheme 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25827640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com