Есть ли у SML аналог диапазона Python ()? - PullRequest
2 голосов
/ 22 февраля 2012

Я ищу функцию SML, которая принимает неотрицательное целое число и возвращает список всех целых чисел от 0 до, но не включая данное значение, аналогично range () в Python. Да, я могу (и написал) свою собственную, но я бы предпочел что-то встроенное, что мне не нужно копировать и вставлять в каждый проект, в котором я хочу его использовать. Есть идеи? Заранее спасибо!

% Python code
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

(* SML code: my implementation; I'd prefer a built-in version *)
fun range x = 
    let fun helper current stop = 
        if current = stop 
        then nil 
        else current :: (helper (current + 1) stop)
    in helper 0 x
    end;

(* my code when run *)
- range 10;
val it = [0,1,2,3,4,5,6,7,8,9] : int list

Ответы [ 2 ]

14 голосов
/ 22 февраля 2012

Возможно, это не так хорошо читается, но ...

- List.tabulate(10, fn x => x)
val it = [0,1,2,3,4,5,6,7,8,9] : int list
0 голосов
/ 22 февраля 2012

Как насчет:

fun ranger 0 = [ 0 ]
  | ranger x = x :: range x-1 

fun range x = reverse (ranger x)
...