Мне сложно понять, как построить решение проблемы с домашним заданием, которое у меня есть для лямбда-выражений. Я должен написать функцию, которая принимает один аргумент, F, который является предикатной функцией и возвращает новую функцию, которая является обратным F.Вложенные функции лямбда-схемы
Я знаю, что где-то в моей функции я вернусь не к значению из переданной функции предиката, чтобы возвращать обратное, но я смущен остальной частью описания проблемы. Проблема заключается в том, что «вам понадобится лямбда внутри лямбда. Поскольку вы не знаете, сколько аргументов F примет (и может фактически принять переменное число), вам придется использовать apply и синтаксис для определения лямбда-выражения что принимает любое количество аргументов »
Я не понимаю, как настроить вложенные лямбда-выражения, чтобы делать то, что я хочу, возвращая обратное все, что может быть F. Я экспериментировал с несколькими разными вещами только для того, чтобы увидеть, могу ли я где-нибудь добраться, но я не понимаю, как вложенные лямбда-выражения работают достаточно, чтобы получить меня в любом месте.
(define converse
(lambda (F)
(lambda
(apply (not (F))))))
Я знаю, что это не будет работать, но мне нужна помощь, чтобы понять, как настроить свои вложенные выражения лямбда делать то, что я хочу.
Вы, вероятно, используя язык преподавания, который не позволяет для этого: 'лямбда args'. Это обычно _works_ в Scheme, и это правильный способ определить лямбда с переменным числом аргументов, но ваш язык обучения обозначает его как ошибку. Попробуйте использовать более продвинутый язык обучения –
Итак, когда я проверяю, что я получаю ошибку, требующую parens вокруг «args» во второй лямбда. Когда я делаю изменения и проверяю снова, я получаю еще одну ошибку, заявляющую, что моя процедура ожидает только 1 аргумент, но найден 2. – Yoink
Нет, вы не должны добавлять круглые скобки вокруг 'args'! так мы говорим Scheme, что ожидается переменное число аргументов. Скажите, какой язык обучения вы используете? –