scheme - 与列表相同的功能

时间:2011-04-17 18:08:00

标签: scheme

我写了这个程序:

(define find-combination
  {lambda (a b)
    (if (eq? ((quotient (car a) (car b)) (quotient (car (cdr a)) (car (cdr b)))))
         (display "1*v1" + ((quotient (car a) (car b))*"v2"))
         (display "0*v1" + "0*v2"))})

(find-combination (list 2 2) (list 2 1))

a和b是两个列表。它给我下一个问题:程序应用:预期程序,给出:1;争论是:2。

我没有得到什么问题。有人可以帮帮我吗?谢谢你。

3 个答案:

答案 0 :(得分:0)

首先,在eq?之后你有太多括号 - 你所写的是指评估(quotient (car a) (car b))并将其视为具有参数(quotient (car (cdr a)) (car (cdr b)))的函数。该错误意味着第一件事被评估为1并且您的解释器期望它是一个过程,而不是整数。这一行应该是:

(if (eq? (quotient (car a) (car b)) (quotient (car (cdr a)) (car (cdr b))))

甚至:

(if (eq? (quotient (car a) (car b)) (quotient (cadr a) (cadr b)))

除此之外,display次调用的行有误 - Scheme没有中缀表示法,因此+*不合适。

答案 1 :(得分:0)

首先,你的代码中有一组花括号(lambda之前的那个)

你传递给eq的参数周围还有另一套关键词吗? 它应该是这样的:

(eq? (quotient (car a) (car b)) (quotient (car (cdr a)) (car (cdr b))))

答案 2 :(得分:0)

在Scheme和Racket中,括号改变了事物的含义。

1

是一个数字,但是

(1)

调用到1作为函数...但是1是数字,而不是函数,因此这将导致您描述的错误。

你对花括号的使用对我来说也有些不安。