2013-06-03 2 views
0

У меня есть список чисел, и я хочу их добавить, а затем умножить на константу.Ошибка, (в addList) неверный селектор индексов

addList := proc(a::list,b::integer)::integer; 
local x,i,s; 
description "add a list of numbers and multiply by a constant"; 
x:=b; 
s:=0; 
for i in a do 
    s:=s+a[i]; 
end do; 
s:=s*x; 
end proc; 

SumList: = addList ([2, 2, 3], 2) работает нормально, но в то же время SumList: = addList ([20, 20, 30], 2) дает ошибку. Может кто-нибудь указать на ошибку?

ответ

2

В цикле for вы делаете s:=s+a[i], но i устанавливается в одно из значений в уже - не в индексе значения. Исправление первого шага должно было бы просто изменить приведенный выше оператор на s:=s+i.

Вы также могли бы написать функцию, как

proc(a::list,b::integer)::integer; 
    convert(a,`+`)*b; 
end; 
1

Еще короче, есть

addList:= (a,b)-> `+`(a[])*b; 

 Смежные вопросы

  • Нет связанных вопросов^_^