我写了这个程序:
(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。
我没有得到什么问题。有人可以帮帮我吗?谢谢你。
答案 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是数字,而不是函数,因此这将导致您描述的错误。
你对花括号的使用对我来说也有些不安。