我试图在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/