多项式:
(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)
生成一个长度列表count
从 start
开始,然后通过和添加step
进行。 start
和 step
是可选参数,分别默认为 0 和 1。
Map 是一个高阶函数,它接受一个函数作为它的第一个参数,然后是一个或多个列表。为了简化事情,我将忽略使用多个列表的情况。新列表满足以下条件:任何给定元素都是将函数应用于原始列表的相应元素的结果。
(map f (x y z ...)) -> ((f x) (f y) (f z) ...)
我不确定你在问什么,但如果你想构造一个递增整数列表,你可以对每个元素应用多项式函数,SRFI-1 有 iota 过程。 所以
(iota 10)
将构造一个 0 到 9 范围内的 10 个整数的列表。 IOTA 可以选择采用额外的开始和步骤参数。 要将多项式函数应用于每个整数并构造新的结果列表,可以使用 map。