在Scheme中,我如何接受并比较列表和子列表的第一项?

时间:2016-10-04 20:53:43

标签: list recursion scheme

我对Scheme没有经验。我试图接受这个列表:

(define disk 
  '("D" "main"
    (("F" "file1.txt" (30))
     ("F" "file2.txt" (11))
     ("D" "sub1"
          (("F" "file1.txt" (1234))
           ("F" "file2.txt" (2345))
           ("F" "file3.txt" (3456))))
     ("D" "sub2" 
          (("F" "file1.txt" (1234))
           ("F" "file2.txt" (2345))
           ("F" "file3.txt" (3456)))))))

我想接受这个列表并比较" F"和" D"找出子列表是文件还是目录。我还必须以递归方式遍历列表,并将每个文件末尾的所有数字相加。

但是,我甚至无法列入清单。在线的每个人总是编写如下代码:

 (car '(1 2 3 4 5))

但我无法找到一个实际列入预制列表的人。这是我写的代码:

(define (file? lst)
  (car '(disk)))

 (file? car '(disk)

但当然,它只是看到"磁盘"作为自己的列表并返回该列表的第一个元素,它只是磁盘。我试图让它回归" F"或" D"所以我可以在这个项目中更进一步。谢谢!

1 个答案:

答案 0 :(得分:0)

看起来您在使用scheme的语法时遇到了麻烦,更具体地说,如何引用参数。所以,你写道:

(define (file? lst)
  (car '(disk)))

这里的问题是你没有引用参数。

更具体一点:让我们说我在数学课上要求一个孩子定义一个函数,它接受一个数字并将它乘以三并加一个,然后他们写了

f(x)= 3 * 4 + 1

这是正确的还是错误的?