Ваш пример на самом деле не иллюстрирует взаимозависимость параметров. Что касается условного аспекта, вы можете встраивать произвольные условия в вызов вашей функции. Таким образом, вы можете иметь, например:
(foo (if (something-p) 'a1 'a2)
(if (something-p) 'b1 'b2))
РЕДАКТИРОВАТЬ: Если вы беспокоитесь о множественных оценках something-p
, вы всегда можете сохранить значение одной оценки в переменной let
, например:
(let ((c (something-p)))
(foo (if c 'a1 'a2)
(if c 'b1 'b2)))