о конкатенации "a || b" в клене? - PullRequest
0 голосов
/ 08 февраля 2012

проверяю код

    L:=[2,1];
    sum('a||b*L[1]', 'b' = 1 .. 2);

Возвращает a1*L[1]+a2*L[1], но я ожидаю получить a1*2+a2*2 после оценки L[1]. Есть идеи?

Спасибо.

EDIT:

У меня есть еще один вопрос. Вот код теста:

    L := [2, 1]
    test := proc (i) local a1; a1 := 1; add(a || b*L[i], b = 1 .. 2) end proc
    test(1);

приведет 2 a1 + 2 a2 без оценки a1, которая является локальной переменной, определенной в функциональном тесте. Я ожидаю получить 2*1+2*a2. Есть еще идеи?

1 Ответ

1 голос
/ 08 февраля 2012

Ваша первая строка - это просто уравнение с =, а не фактическое назначение с :=. Значит, вы не выполняли задание L.

А неправильные кавычки неправильно используются в вызове sum и слишком сильно переносятся.

Вы также можете использовать add вместо sum, чтобы полагаться на специальные правила оценки add и, таким образом, избавиться от необходимости использовать неравные кавычки.

> L:=[2,1];                          
                              L := [2, 1]

> add(cat(a,b)*L[1], b = 1 .. 2);
                              2 a1 + 2 a2

> add((a||b)*L[1], b = 1 .. 2);  
                              2 a1 + 2 a2

> sum('a||b'*L[1], 'b' = 1 .. 2);    
                              2 a1 + 2 a2

> sum('cat(a,b)'*L[1], 'b' = 1 .. 2);
                              2 a1 + 2 a2
...