1

SML を使用して、文脈自由文法スタイルの整数のリストを生成したいと考えています。

構文は次のようになりS -> 1 S 2 | epsilonます。

そして、これは私が試したものです

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

たとえば、の期待される結果はgen(3)になるはずです[1, 1, 1, 2, 2, 2]

ただし、タイプに関連するこのエラーが発生しました。

Error: operator and operand don't agree [literal]
  operator domain: 'Z * 'Z list
  operand:         'Z * int
  in expression:
    gen (n - 1) :: 2

では、どのように実装すればよいでしょうか。事前に感謝します。どんな助けでも大歓迎です!

4

2 に答える 2

2

または、パターン マッチングを使用します。

fun gen 0 = []
  | gen n = 1 :: gen (n-1) @ [2]
于 2013-10-17T11:36:52.153 に答える
1

わかった、やるべき

fun gen(n: int) = 
    if n = 0 then []
    else 1 :: gen(n - 1) @ [2]
于 2013-10-16T04:54:57.853 に答える