Что такое лисповский эквивалент System.exit (0)? - PullRequest
2 голосов
/ 05 декабря 2011

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

В Java я могу сделать System.exit (0);

Есть ли у lisp что-то похожее?

Ответы [ 3 ]

14 голосов
/ 05 декабря 2011

MAPCAR бесполезен для итерации по данным и выхода при обнаружении успешного условия завершения.

Common Lisp предоставляет MAPC, что похоже на MAPCAR, но не накапливает результаты.См. Также функцию MAP.

Дополнительно Common Lisp предоставляет множество функций, таких как FIND, FIND-IF, FIND-IF-NOT, ...

Для управления потоком Common Lisp имеет RETURN, RETURN-FROM, CATCH и THROW и многие другие.

5 голосов
/ 05 декабря 2011

Эквивалент System.exit() не имеет смысла в среде, ориентированной на REPL, такой как Lisp;он может существовать, но, скажем, не заставит вашу функцию возвращать значение.

(return-from) может сделать то, что вы ищете, если ваш код структурирован надлежащим образом.

1 голос
/ 11 декабря 2011

Это, вероятно, не подходящее решение в этом случае (используйте ответ Дугала для возврата из вложенных циклов / вызовов), но для полноты буквальный эквивалент System.exit(0); будет выглядеть примерно так: Portable Exit .

Как видите, в разных реализациях оно совершенно разное, потому что оно не является частью стандарта.

...