Лисп: определить, содержит ли список предикат - PullRequest
3 голосов
/ 30 марта 2010

Как часть домашнего задания в Лиспе, я должен использовать apply или funcall для любых предикатов, которые я найду. Мой вопрос (раскрытый в курсовой работе): как мне узнать, когда я нашел предикат в моем списке аргументов? Я выполнил базовый поиск в Google и пока ничего не нашел. Нам разрешено использовать ссылки на Lisp для назначения - даже указатель на хороший онлайн-ресурс (и, возможно, на конкретную страницу в пределах одного) будет великолепен!

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Добавьте к ответу Сванте: я не думаю, что есть какой-либо способ проверить, является ли данная функция предикатом, как вы могли бы это сделать на языке статической типизации. Большинство реализаций CL предоставляют функции самоанализа, такие как SBCL sb-introspect:function-arglist, которые позволят вам проверить, что принят только один аргумент. Не гарантируется, что поведение функции нормальное, но может быть лучше, чем ничего.

1 голос
/ 30 марта 2010

Каноническим справочником является Common Lisp Hyperspec .

Я не знаю, каково ваше назначение, но вы можете либо проверить каждый аргумент по списку возможных предикатов, либо, возможно, определить, является ли ваш аргумент функцией (functionp), если вы можете считать, что все функции переданы будут предикаты.

...