gpt4 book ai didi

scheme - 如何在不使用 eval-string 的情况下在方案中创建动态符号和命令列表?

转载 作者:行者123 更新时间:2023-12-02 00:31:25 25 4
gpt4 key购买 nike

我正在尝试使用从输入文件中读取的数据进行函数调用。我有以下函数,它接受一个顶点列表和任意数量的命令。 (我在这里简化了一些功能)。

(create-graph vertex-list cmd0 cmd1 ... cmdn)

我的输入文件应该是这样的:

(2
(vertex-create "Paris")
(vertex-create "London"))

其中 2 是顶点数。

有了这个输入,我想将 create-graph 称为

(create-graph
'(v1 v2)
(set! v1 (vertex-create "Paris"))
(set! v2 (vertex-create "London"))
)

其中 v1 和 v2 是为每个顶点创建的符号。

我现在所拥有的是将整个函数构造为一个字符串并使用 eval-string。但是有没有办法在不使用 eval-string 的情况下进行该函数调用?对某些部分使用 eval 应该没问题。更具体地说,我认为我需要能够动态地执行这些操作:

  • 创建一个符号列表,并且
  • 创建命令(例如 (set!v1 (vertex-create "Paris")))

非常感谢您的意见。谢谢!

最佳答案

是的,您可以在没有 eval 的情况下执行此操作。是的,这是一个更好的主意。重要的是要理解每个程序都可以被视为其输入的解释器,但是一旦你理解了 eval,你就不应该再使用它......

你的程序可能看起来像这样:

#lang racket

(define cmds (file->value input-file))

(define vertex-names (for ([i (in-range (length cmds))])
(string->symbol (format "v~s" i))))

(create-graph
(for/list ([v (in-list vertex-names)]
[cmd (in-list cmds)])
(list
v
(match cmd
[(list 'vertex-create str) (vertex-create str)]
... other choices? ...
))))

我假设您不会指定顶点的数量,而只是从命令列表的长度中推断出来。另外,我看不到可能还有什么其他“命令”。还,你的设置!是不必要的和令人讨厌的:)。

关于scheme - 如何在不使用 eval-string 的情况下在方案中创建动态符号和命令列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6604015/

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