Что идиома OCaml эквивалентна функции диапазона Python?

Сначала вы должны нарисовать столбцы, которые вы хотите видеть, а затем вы наносите белую полосу над остальными. Но это скорее взлом, чем хорошее решение.

import matplotlib.pyplot as plt
import numpy as np


target_bars_start = [10, 10, 15, 8]
target_bars_end = [15, 23, 16, 10]
N = len(target_bars_end)
ind = np.arange(N)

plt.barh(ind, target_bars_end, 0.35)
plt.barh(ind, target_bars_start, 0.35, color='white')

enter image description here

25
задан Pramod 28 October 2008 в 16:06
поделиться

4 ответа

Нет никакой идиомы, о которой я знаю, но вот довольно естественное определение с помощью инфиксного оператора:

# let (--) i j = 
    let rec aux n acc =
      if n < i then acc else aux (n-1) (n :: acc)
    in aux j [] ;;
      val ( -- ) : int -> int -> int list = <fun>
# 1--2;;
- : int list = [1; 2]
# 1--5;;
- : int list = [1; 2; 3; 4; 5]
# 5--10;;
- : int list = [5; 6; 7; 8; 9; 10]

, С другой стороны, эти расширение синтаксиса пониманий (который дает синтаксис [i .. j] для вышеупомянутого), вероятно, будет включено в будущий выпуск "версия сообщества" OCaml, так, чтобы мог стать идиоматичным. Я не рекомендую начать играть с расширениями синтаксиса, если Вы плохо знакомы с языком, все же.

25
ответ дан 28 November 2019 в 18:23
поделиться

Здесь Вы идете:

let rec range i j = if i > j then [] else i :: (range (i+1) j)

Примечание, что это не рекурсивно хвостом. Современные версии Python даже имеют ленивый диапазон.

11
ответ дан 28 November 2019 в 18:23
поделиться

BTW, в Haskell, которого Вы использовали бы

enumFromTo 1 n
[1 .. n]

, Они являются просто ненужными.

take n [1 ..]
take n $ iterate (+1) 1
0
ответ дан 28 November 2019 в 18:23
поделиться

С Батареи в комплекте вы можете написать

let nums = List.of_enum (1--10);;

Оператор - генерирует перечисление от первого значения ко второму. Оператор - ^ аналогичен, но перечисляет полуоткрытый интервал ( 1 - ^ 10 будет нумеровать от 1 до 9).

13
ответ дан 28 November 2019 в 18:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: