Доступ к входу в процедурах более высокого порядка на схеме

Мне нужно понять, как я могу получить доступ к входу функции, которая передается другой функции в качестве входа.

Например; У меня есть функция f, которая просто делает (define f (lambda (x) (if (null? x) #t (car x)))) это. Мне нужно написать функцию, которая принимает это f в качестве входных данных и возвращает другую функцию, такую, что

-Определить функцию (twoback f), которая принимает функцию f в качестве входных данных.

-На выходе он должен возвращать новую функцию g, которая ведет себя следующим образом:

g(x) = #t, если x пустой список или список длины 1.

 = f(y) where y=(cdr x) otherwise.

И функция будет вызываться так: ((twoback f3) (list #t #f #t #f))

Итак, на самом деле мой вопрос: как я могу получить доступ к списку, заданному вызовом функции в функции, которую я собираюсь написать (функция twoback)? Потому что мне нужно проверить, пуст он или нет.


person Dr.Oz    schedule 11.11.2012    source источник


Ответы (2)


Короткий ответ, задав параметр x. Что-то вроде этого:

(define twoback
  (lambda (f)
    (lambda (x)
      ...)))     ; fill-in with the logic requested

Выше будет определена процедура с именем twoback, которая получает f в качестве параметра, и, в свою очередь, вернет новую процедуру, которая получает x в качестве параметра. Эта вторая возвращаемая процедура называется g в вопросе, из нее вы можете получить доступ как к f, так и к x, как обычно.

Теперь просто заполните часть ... ожидаемым результатом.

person Óscar López    schedule 11.11.2012

Я думаю, это то, что вы имеете в виду:

(define (twoback f)
 (lambda (x)
  (if
   (or (null? x) (null? (cdr x)))
   #t
   (f (cdr x)))))
(define f (lambda (x) (if (null? x) #t (car x))))
person Arno Moonens    schedule 11.11.2012
comment
имейте в виду, что это, вероятно, домашнее задание, в этом случае не рекомендуется давать прямые ответы, вы не помогаете ОП, предоставляя решение его работы без каких-либо усилий с его стороны. - person Óscar López; 11.11.2012