Я делаю домашнее задание, но я застрял на чем-то на несколько часов. Я уверен, что это действительно тривиально, но я до сих пор не могу понять это после того, как просмотрел всю доступную документацию. Может ли кто-нибудь дать мне руку? По сути, упражнение по программированию OCaml требует определить функцию x^n с возведением в степень по алгоритму возведения в квадрат.
Я посмотрел решение:
let rec exp x = function
0 -> 1
| n when n mod 2 = 0 -> let y = exp x (n/2) in y*y
| n when n mod 2 <> 0 -> let y = exp x ((n-1)/2) in y*y*x
;;
Чего я, в частности, не понимаю, так это того, как параметр n может быть опущен в операторе fun и почему его следует использовать в качестве переменной для совпадения с x, что не имеет очевидной связи с определением возведения в степень путем возведения в квадрат.
Вот как бы я это сделал:
let rec exp x n = match n with
0 -> 1
| n when (n mod 2) = 1 -> (exp x ((n-1)/2)) * (exp x ((n-1)/2)) * x
| n when (n mod 2) = 0 -> (exp x (n/2)) * (exp x (n/2))
;;
n
во втором фрагменте кода на другое имя переменной, но оставите остальные какn
, код все равно будет работать. Вы понимаете, почему? - person sepp2k   schedule 21.10.2012