LINUX.ORG.RU

Тоже не могу написать код по заданному аглоритму

 , , олгоритм


1

2

Все мозги сломал!!11 Все руки стер о пиc^W клавиатуру!!11

Вот тред: Не могу написать код по заданному алгоритму Вот его формула, по которой надо посчитать

 M_j (p, a) = p_0 * a_j + Σ_{i=1}^{j-1} [p_i * (a_j - a_i)]

Я написал на J только для варианта M_j, где j = n, длине массива

a =: 1 2 3 4
p =: 1 0 2 1

s1 =: {.@:[ * {:@:]
s2 =: +/@:[ * {:@:]
s3 =: +/@:*
total =: s1 + s2 - s3
p total a
  => 9

А как написать для произвольного j в tacit нотации? Хочу такое:

p (total order j) a

Люди, не познавшие дзен, могут прислать решение на Haskell, тоже в point free (хотя это не так интересно)



Последнее исправление: deadplace (всего исправлений: 1)

Кстати, неправильно написал, но это и не важно. Интересен общий случай

deadplace
() автор топика
Ответ на: комментарий от deadplace

Уже понял. Я почему-то подумал, что здесь можно как в Хаскеле из x {. y сделать (x {.) y. В смысле, из диадической функции монадическую.

monk ★★★★★
()
Ответ на: комментарий от monk

В смысле, из диадической функции монадическую.

Если ты говоришь о частичном применении, то это легко: Умножаем правый/единственный аргумент на 3:

f =: [: 3&* ]

Умножаем левый/единственный аргумент на 3:

f =: [: 3&* [

Я просто забыл, как делать союзы, а тут, видно, нужны они

deadplace
() автор топика

В лучшем случае получается

p ((j}.[) total (j}.])) a

Как упаковать это внутрь функции, я не очень понимаю.

monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.