【发布时间】:2017-04-19 14:32:15
【问题描述】:
到目前为止,这是我的代码。
(defun myReduce (foo L)
(if(eq L nil)
nil
(if(eq (car(cdr L)) nil)
nil
(cons (funcall foo(car L) (car(cdr L)))
(myReduce foo (cdr(cdr L)))))))))
它返回一个列表 ( 3 7 ) *这是我的踪迹*
``>(trace myReduce)
(MYREDUCE)
>(myReduce (lambda (x y) (+ x y)) '(1 2 3 4 5))
1> (MYREDUCE (SYSTEM:LAMBDA-CLOSURE () () () (X Y) (+ X Y))
(1 2 3 4 5))
2> (MYREDUCE (SYSTEM:LAMBDA-CLOSURE () () () (X Y) (+ X Y))
(3 4 5))
3> (MYREDUCE (SYSTEM:LAMBDA-CLOSURE () () () (X Y) (+ X Y)) (5))
<3 (MYREDUCE NIL)
<2 (MYREDUCE (7))
<1 (MYREDUCE (3 7))
(3 7)``
我已经尝试过这样做(更新代码)...
(defun myReduce (foo L)
(if(eq L nil)
nil
(if(eq (car(cdr L)) nil)
nil
(+ (cons (funcall foo(car L) (car(cdr L)))
(myReduce foo (cdr(cdr L))))))))))
让程序将递归列表添加到cons 列表但无济于事,
这是更新代码的跟踪
>(trace myReduce)
(MYREDUCE)
>(myReduce (lambda (x y) (+ x y)) '(1 2 3 4 5))
1> (MYREDUCE (SYSTEM:LAMBDA-CLOSURE () () () (X Y) (+ X Y))
(1 2 3 4 5))
2> (MYREDUCE (SYSTEM:LAMBDA-CLOSURE () () () (X Y) (+ X Y))
(3 4 5))
3> (MYREDUCE (SYSTEM:LAMBDA-CLOSURE () () () (X Y) (+ X Y)) (5))
<3 (MYREDUCE NIL)
Error: TYPE-ERROR :DATUM (7) :EXPECTED-TYPE NUMBER
Fast links are on: do (si::use-fast-links nil) for debugging
Signalled by +.
TYPE-ERROR :DATUM (7) :EXPECTED-TYPE NUMBER
谁能带领我走向一个好的有序的方向?
【问题讨论】:
-
您的代码看起来没有正确缩进。你可能想改进它。