gpt4 book ai didi

scheme - 控制计划中的评估(贵重)

转载 作者:行者123 更新时间:2023-12-04 14:05:13 25 4
gpt4 key购买 nike

这似乎是一个简单的问题。也许是如此简单,以至于很难找到能够找到答案的搜索。在Scheme(特别是Guile实现,如果有什么不同)中,我如何评估已引用的内容?

这就是我想要做的。

我基本上需要确保定义的函数以特定顺序对其参数进行评估,因为在评估其他参数时,依赖于评估一个参数所引起的副作用。但是,Scheme说参数可以按任何顺序求值,因此我想通过引用参数然后按所需顺序手动求值来手动强制它。

看来“评估”应该做我想要的,但是它有两个问题:

  • 不鼓励使用它,因此我觉得应该有一种更好的方法来完成我想在这里做的事情。
  • 在“方案”中,看来eval需要第二个参数,即环境。这让我感到困惑。我希望它在与该语句出现所在的环境相同的环境中评估,那么为什么我需要第二个参数?这有可能吗?我已经玩过eval了,似乎有些实现需要使用不同的参数(例如mit-scheme甚至不知道是什么(交互环境)!!!)

  • 我尝试了其他技巧,例如建立lambda:
    (list 'lambda '() '(car (b c)))

    但是似乎必须对其进行评估才能生成过程。
    我也尝试过:
    (list lambda '() '(car (b c)))

    但这会返回一个“primitive-builtin-macro”,它也不起作用。

    编辑:
    看起来宏将可用于控制评估顺序:
    (defmacro test1(a b)`(开始,b,a))

    最佳答案

    eval完全是错误的工具,仅用于更改参数的求值顺序。而是创建一个宏:

    ;; (my-fun e1 e2)
    ;; Just calls my-real-fun, but evaluates e2 before e1
    (define-syntax my-fun
    (syntax-rules ()
    [(my-fun e1 e2)
    ;; let* has guaranteed order of evaluation
    (let* ([y e2]
    [x e1])
    (my-real-fun x y))]))

    (define (my-real-fun x y) ....)

    或使用 defmacro(如果需要)。

    关于scheme - 控制计划中的评估(贵重),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631479/

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