Другие ответы уже проделали хорошую работу по описанию «правильного» способа ведения дел, который по совпадению также решает вашу проблему. Тем не менее, ваш NPE вызван
((def pivotval (nth arr pivotidx))
...more stuff...)
Вы не можете просто использовать ()
для группировки элементов: (foo)
в lisp означает вызов функции foo
; аналогично ((bar) (foo))
означает:
- Позвоните
bar
, сохранив результат как x
- Звоните
foo
. сохранение результата как y
- вызов функции
x
с аргументом y
Поскольку def
не возвращает функцию, вызов ее результата с шестью или семью аргументами вызовет проблему.
Вместо этого, если вы хотите сгруппировать вещи, вы должны использовать специальную форму do
. (do (foo) (bar))
означает «вызов foo, а затем возврат результата вызова bar».