Общая последовательность над натуральными числами - PullRequest
0 голосов
/ 04 июня 2018

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

val generic_sequence= fn : (int -> int) -> int seq

, то есть она должна получить в качестве входных данных функцию:

foo: int -> int

и создатьпоследовательность, которая активирует foo для всех натуральных чисел.

Я написал следующий вспомогательный код (работает нормально):

datatype 'a seq = Nil 
              | Cons of 'a * (unit-> 'a seq);

fun head (Cons(x,_)) = x;
fun tail (Cons (_,xf)) = xf();

fun naturals k = Cons(k,fn()=>naturals (k+1));

, и когда я попытался реализовать общую последовательность, я застрял.Вот где у меня.

fun aux (Cons(x,xf))= (Cons(foo x,(fn=>aux((xf())))));

fun generic_seq foo = (aux (from 0));

У меня 2 проблемы:

  1. Не компилируется

  2. Я не уверен, что мой подход правильный

Буду признателен за помощь здесь.

1 Ответ

0 голосов
/ 04 июня 2018

Хорошо, я понял,

Я создал функцию mapq, и она в основном сделала все для меня.

 fun mapq f Nil = Nil 
   | mapq f (Cons (x,xf)) = Cons (f(x), fn() => mapq f (xf()));
...