2012-04-17 2 views
5

Я хотел бы сделать что-то вроде этого:Как написать взаимно рекурсивные функции в связывании let в SML?

fun f() = 
    let 
     fun a() = b() 
    and 
     fun b() = a() 
    in 
    () 
    end 

, где а и Ь чувственные взаимно рекурсивные функции. Однако это дает:

Error: syntax error: replacing AND with SEMICOLON

Есть ли способ сделать это?

ответ

8

Декларация взаимно рекурсивных функций в SML отмечен fun ... and ... блока:

fun f() = 
  let 
    fun a() = b() 
    and b() = a() (* There is no 'fun' keyword before b() *) 
    in 
    () 
    end 
+0

Переводчик рассердился на «местный», но заменяя локальны пусть (то есть, чтобы избавиться от второго удовольствия в моем коде), похоже, работает. Благодаря! – user1339898

Смежные вопросы