我试图在lisp中创建自己的length/2函数(它允许您查找列表的长度),但遇到了问题。
如果我用java编程,我会创建一个全局索引变量

that = 0

那我就用这种方法
if(list.equal(null))
{
    return index;
}
else
{
    index++;
    return functioname(tail of list) ;
}.

显然这并不是真正的java语法,但我只是试图在lisp中传递我想要应用的逻辑。
我的主要问题是lisp中的ifs只允许您
if test expression
    then do something
else
    do something else

当我试着做的时候
if test expression
    then do something
else
    do 2x something

有没有一种方法可以在lisp中完成这个任务,或者有没有更好的方法来解决这个问题?

最佳答案

递归执行:

len(list):
    if list is null
        return 0
    else
        remove first_item from list
        return 1 + len(list)


(define (length items)
  (if (null? items)
      0
      (+ 1
         (length (cdr items)))))


(length (list 1 2 3))


或使用set!
(define count 0)

(define (length items)
  (when (not (null? items))
    (set! count (+ count 1))
    (length (cdr items))))

(length (list 1 2 3 4 5))

count

关于function - 在Lisp中递归并创建自己的长度函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37369965/

10-12 02:03