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)