我正试着拿两双(a。b) '(c .d)并将它们输入到方程式中。
(define dist
(lambda (pr)
(sqrt (+ (expt (- (car pr) (car pr) 2)(expt (- (cdr pr) (cdr pr) 2)))我尝试了这种方法和其他一些方法,但我只是得到了错误。
我的实际等式似乎适用于数字,但我不确定我应该如何输入两对,或者我甚至不确定我是否应该使用我拥有的等式。我担心我认为这一切都是错误的,我的书中没有提到如何处理两对,我的老师也不会回答。我很困惑,任何提示或解释都会很棒。
编辑:我应该提到,为了测试我的代码,我用数字代替了成对的字母,例如:
(dist '(2 . 5) '(3 . 1)) 我试图让它变得通用,因为任何数字都必须能够与代码一起工作。很抱歉给你造成了混乱。
发布于 2015-04-27 09:14:50
示例过程:
(lambda (a b)
(+ a b))这里的a和b是两个参数。它们的名称在形参列表中声明,并由主体中的这些名称使用。a和b可能是数字,只能通过它们在过程主体中的使用方式来查看,但是形参列表本身并没有说明任何有关类型的内容。它们可能是对,而+可能是词法绑定的过程,它做的事情与数字相加完全不同。
在您的过程中,您定义了一个绑定变量pr。从代码看,这似乎是一对,因为您同时对其应用了car和cdr。如果需要添加另一个对,则必须使用您选择的名称(如pr,可能是was)将其添加到形参列表中,并在过程体中使用该名称。
您可以阅读有关lambda expressions in the R6RS standard格式的更多信息。
发布于 2015-04-28 14:07:13
您已经展示了一个接受两个参数的函数dist:
(dist '(2 . 5) '(3 . 1))这样如何:
(define dist
(lambda (arg1 arg2)
(let ((x1 (car arg1))
(y1 (cdr arg1))
(x2 (car arg2))
(y2 (cdr arg2)))
(sqrt (+ (expt (- x2 x1) 2)
(expt (- y2 y1) 2))))))https://stackoverflow.com/questions/29885311
复制相似问题