Functional programming 球拍中的代码错误
我有此代码,但我得到以下错误:Functional programming 球拍中的代码错误,functional-programming,scheme,racket,Functional Programming,Scheme,Racket,我有此代码,但我得到以下错误: application: not a procedure; That procedure can expected to be applied to arguments given: '(8 1 2 3 4 5) arguments .: 我试图修复它,但仍然没有结果 此函数应返回一个新列表,在名为“索引”的列表中包含的相应位置插入名为“listas”的列表元素 在6。和7。多插入器的行您有: (let ((operator (inserta
application: not a procedure;
That procedure can expected to be applied to arguments
given: '(8 1 2 3 4 5)
arguments .:
我试图修复它,但仍然没有结果
此函数应返回一个新列表,在名为“索引”的列表中包含的相应位置插入名为“listas”的列表元素
在6。和7。多插入器的
行
您有:
(let ((operator (insertar (car indices) (car listas) lista))
(argument (multi-insertar lista (cdr listas) (cdr indices))))
(operator argument)) ; operator must be a procedure for this to work!
我将这两个表达式放在了一个let
中,以使您所做的事情更具可读性。错误说明的是运算符的值
不是一个过程,而是列表(812345)
和('(812345)参数)
对计算器没有意义
然而,这样的代码是有意义的,因为这里的变量操作符是一个过程:
(let ((operator (if (< x 1) * /))
(operator x 10)) ; we either divide or multiply by 10.
(let((运算符(if(
您可能想做的是:
(define (multi-insertar lista listas indices)
(if (not (eq? (length listas) (length indices)))
"Numero de indice no es igual a numero de listas a ingresar"
(if (= 1 (length indices))
(insertar (car indices) (car listas) lista)
;; only the following branch is changed
(insertar (car indices) (car listas)
(multi-insertar lista (cdr listas) (cdr indices))))))
因此,现在multi-insertar
使用insertar
从lista
的末尾开始插入所有元素
评论:
elementos
对于listas
只有当指数按降序排列时,这才能按预期工作。比较以下两个示例:
> (multi-insertar '(a b c d e f) '(x y z) '(1 3 5))
=> (a x b c y d e z f)
> (multi-insertar '(a b c d e f) '(z y x) '(5 3 1))
=> (a x b y c z d e f)
查看您的((insertar…
?insertar
返回一个列表,因此您最终将尝试将该列表作为一个过程应用,因此出现错误Yes,只需去掉括号即可。
> (multi-insertar '(a b c d e f) '(x y z) '(1 3 5))
=> (a x b c y d e z f)
> (multi-insertar '(a b c d e f) '(z y x) '(5 3 1))
=> (a x b y c z d e f)