Я просто подумал написать какую-нибудь функцию, похожую на функции разделения Mathematica
с передачей опции в максимумах в виде,
listpartitionpad(l,n,k,d):= block([temp:[],gap,newl,ntemp:[]],
newl:apply(create_listpad,flatten([n,k,d,l])),
map(lambda([x],if(length(newl)>=x+n-1 and is(unique[x]#[d]))then temp:cons(part(newl,makelist(i,i,x,x+n-1)),temp)
else temp:cons(part(newl,makelist(s,s,x,length(newl))),temp)),makelist(i,i,1,length(newl),k)),
ntemp:sublist(temp,lambda([x],is(length(x)=n))),reverse(ntemp));
Usage
: listpartitionpad([a,b,c,d,e,f,g],3,3,x); => [[a,b,c],[d,e,f],[g,x,x]]
Теперь, как я проверял, все функции манипулирования списками закодированы на lisp.
Мой вопрос в том, хорошо ли, что я могу кодировать любую такую функцию на языке maxima, а не на lisp, или это вызовет у меня некоторые проблемы с производительностью или что-то еще, чего я должен знать, чего я еще не знаю. Я провел простой тест
:lisp(time(loop repeat 1000000))
real time : 0.850 secs
run-gbc time : 0.540 secs
child run time : 0.000 secs
gbc time : 0.310 secs
В случае другого подхода, основанного на максимумах,
block([],for i:1 thru 1000000 do []);
Оценка заняла 5,7700 секунд (прошло 5,7700 секунд).
И эта разница растет экспоненциально по мере роста i
.
Является ли это причиной того, что все манипуляции со списками закодированы в lisp?