将函数作为scheme中的参数传递

时间:2016-04-02 23:20:38

标签: functional-programming scheme lisp racket

我正在尝试创建一个函数(last),它将函数(f)和List作为参数。列表被传递给函数(奇数?),如果列表中的最后一个元素是奇数,则返回true(#t),否则返回false(#f)。但是下面的代码不起作用,正确的方法是什么将该函数声明为参数。

(define (last f L)
(if (null? L) '() ( last f (cdr L)) ))
  

(最后奇数?'(0 5 3 8 6 7))

2 个答案:

答案 0 :(得分:2)

在这里'如何使用内置函数编写解决方案,注意将过程作为参数传递的正确语法,并且还要注意将函数命名为as是一个坏主意last,它与现有程序发生冲突,就像你应该用来解决问题一样!

(define (my-last f L)
  (f (last L)))

如果您必须从头开始编写该函数,请确保您了解所需的基本情况:

(define (my-last f L)
  (cond ((null? L) #f)
        ((null? (cdr L)) (f (car L)))
        (else (my-last f (cdr L)))))

无论哪种方式,它都按预期工作:

(my-last odd? '(0 5 3 8 6 7))
=> #t

答案 1 :(得分:-1)

对于您编写函数的方式,您在调用中设置了额外的括号。它应该只是(last odd? '(0 5 3 8 6 7)),正如有人在评论中建议你的那样。