Передача ссылки на функцию в SML - PullRequest
0 голосов
/ 02 января 2019

Я хотел бы передать ссылку на функцию foo в sml и изменить ее значение.рассмотрим следующий сценарий:

val x = ref 5; 
foo 3 x; 
(* now x will be 3 *) 

возможно ли это в sml?я знаю, что sml не имеет переменных, поэтому я не уверен, что это возможно.я хотел бы сделать так, чтобы создать такие тесты, как:

val test1 = (foo (seq 2) = 2); 
val test2 = (foo it = 2);

, он не будет работать, потому что it будет содержать вывод test1 (его логическое значение).Я хотел бы передать ссылку x и изменить ее каждый раз.

val x = ref 0;
val test1 = (foo (seq 2) x = 2); 
val test2 = (foo (getnext(!x)) x = 3); 
val test3 = (foo (getnext(!x)) x = 4); 
val test4 = (foo (getnext(!x)) x = 5);

getnext получит следующее значение и foo вставит его в x, помимо возврата значения, чтобы можно было проверить равенство.

1 Ответ

0 голосов
/ 02 января 2019

Что не так с

fun foo v r = (r := v; v)

?

...