如何将 x 定义为整数列表以评估 x 中所有元素的多项式



多项式:

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

我想做类似的事情

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

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

3
1
1
3
...

我是否必须编写一个单独的方法来使其工作,或者 Scheme 是否有内置的东西?

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

(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)生成一个长度列表countstart 开始,然后通过和添加step 进行。 startstep 是可选参数,分别默认为 0 和 1。

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

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

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

(iota 10)

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

最新更新