计划让运算符成为列表中的过程

Scheme get operator to be a procedure from a list

我想从一个列表中获取一个运算符,它将是一个过程而不是一个符号。

例如,假设我想构建此列表:'(- a 3) 使用 cons

如果我输入 ((car '(- a 3)) 5 3),它应该打印出 2。但是,由于 - 在列表内部,因此获取列表的 car 仍然是一个符号,而不是实际的运算符。

这里的问题是我必须使用 cons 来构建 (- a 3) 列表(并打印出来)。我的教授将在其前面添加 car 并在末尾添加 5 3 它应该打印出 2.

所以我目前有这个:(cons '- (cons 'a (cons '3 '()))),它打印出 (- a 3)

如果我添加 car5 3: ((car (cons '- (cons 'a (cons '3 '())))) 5 3),我会收到一条错误消息 not a procedure.

有人可以提供一些指导吗?我不确定如何进行。

然后使用:(cons - (cons 'a (cons 3 '())))。也就是说,不要引用 -。这将使用 - 过程而不是符号。

> ((car (cons - (cons 'a (cons 3 '())))) 5 3)
2

这可以写成准引用列表,如 shorthand:

> ((car `(,- a 3)) 5 3)
2

在准引用的数据中——也就是说,使用反引号而不是引号——前面有逗号的任何东西都是不带引号的。 (里面没有逗号的准引号与引号相同。)