计划让运算符成为列表中的过程
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)
。
如果我添加 car
和 5 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
† 在准引用的数据中——也就是说,使用反引号而不是引号——前面有逗号的任何东西都是不带引号的。 (里面没有逗号的准引号与引号相同。)
我想从一个列表中获取一个运算符,它将是一个过程而不是一个符号。
例如,假设我想构建此列表:'(- a 3)
使用 cons
。
如果我输入 ((car '(- a 3)) 5 3)
,它应该打印出 2
。但是,由于 -
在列表内部,因此获取列表的 car
仍然是一个符号,而不是实际的运算符。
这里的问题是我必须使用 cons
来构建 (- a 3)
列表(并打印出来)。我的教授将在其前面添加 car
并在末尾添加 5 3
它应该打印出 2
.
所以我目前有这个:(cons '- (cons 'a (cons '3 '())))
,它打印出 (- a 3)
。
如果我添加 car
和 5 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
† 在准引用的数据中——也就是说,使用反引号而不是引号——前面有逗号的任何东西都是不带引号的。 (里面没有逗号的准引号与引号相同。)