如何将 x 定义为整数列表来计算 x 中所有元素的多项式?

How can I define x as a list of integers to evaluate a polynomial for all elements in x?

多项式:

(modulo (+ (expt x 2) 2) 5)

我想做类似

的事情
(define x <list of integers like 0, ..., 10>)

然后它应该输出如下结果:

3
1
1
3
...

我是否必须编写一个单独的方法才能使它正常工作,或者 Scheme 是否有内置的东西?

我不确定你在问什么,但如果你想构造一个递增整数列表,你可以将你的多项式函数应用于每个元素,SRFI-1 有 iota 过程。所以

(iota 10)

将构造一个包含 0 到 9 范围内的 10 个整数的列表。iota 可选择采用额外的开始和步骤参数。要将多项式函数应用于每个整数并构造一个新的结果列表,您可以使用 map.

你写的方式行不通。在你是多项式的情况下,你直接取 x 的 expt,如果你将它定义为一个列表,将导致 运行-time 错误。

(map (lambda (x) (modulo (+ (expt x 2) 2) 5)) (iota 11 1 1))

;Value 2: (3 1 1 3 2 3 1 1 3 2 3)

我所做的是将您的多项式包装为匿名函数,并将其用作映射的参数。第二个参数 (iota count start step) 生成一个长度为 count 的列表,从 start 开始,然后添加 stepstartstep 是可选参数,分别默认为 0 和 1。

Map 是一个高阶函数,它接受一个函数作为它的第一个参数,然后是一个或多个列表。为了简化事情,我将忽略使用多个列表的情况。新列表满足任何给定元素是将函数应用于原始列表的相应元素的结果的条件。

(map f (x y z ...)) -> ((f x) (f y) (f z) ...)