Sml 关于根据上下文无关语法生成值列表(例如[1,1,1,2,2,2])

Sml 关于根据上下文无关语法生成值列表(例如[1,1,1,2,2,2]),sml,context-free-grammar,Sml,Context Free Grammar,我想用SML生成一个上下文无关的语法样式的整数列表 语法类似于S->1s2 | epsilon 这就是我试过的 fun gen(n: int) = if n = 0 then [] else 1 :: gen(n - 1) :: 2 例如,gen(3)的预期结果应该是[1,1,1,2,2] 但是,我得到了与类型相关的错误 Error: operator and operand don't agree [literal] operator domain: 'Z * 'Z l

我想用SML生成一个上下文无关的语法样式的整数列表

语法类似于
S->1s2 | epsilon

这就是我试过的

fun gen(n: int) = 
    if n = 0 then []
    else 1 :: gen(n - 1) :: 2
例如,
gen(3)
的预期结果应该是
[1,1,1,2,2]

但是,我得到了与类型相关的错误

Error: operator and operand don't agree [literal]
  operator domain: 'Z * 'Z list
  operand:         'Z * int
  in expression:
    gen (n - 1) :: 2
那么我应该如何实现它呢?提前感谢您,我们非常感谢您的帮助

我明白了,我应该这么做

fun gen(n: int) = 
    if n = 0 then []
    else 1 :: gen(n - 1) @ [2]

或者,使用模式匹配:

fun gen 0 = []
  | gen n = 1 :: gen (n-1) @ [2]