Saya seorang pemula di SML.

Setelah beberapa pencarian, saya masih tidak dapat menemukan sumber daya apa pun yang terkait dengan melintasi pohon n-ary. Banyak contoh hanya melintasi pohon biner sederhana.

Katakan, aku punya

datatype 'a tree = leaf of 'a list | node of 'a tree list

Saya ingin melintasi pohon n-ary ini dan mengembalikan pohon yang sama persis (val traverse = fn : 'a tree -> 'a tree)

Bagaimana saya bisa melakukannya?

Berikut kode saya:

fun traverse (leaf x) = (leaf x)
  | traverse (node []) = node []
  | traverse (node [x]) = node [x]

Saya berjuang untuk menambahkan pola terakhir, yaitu, (ini salah)

  | traverse (node (x::xs)) = traverse (node x) :: traverse (xs)

Terima kasih atas bantuan Anda.

0
Humber 20 November 2020, 09:08

1 menjawab

Jawaban Terbaik

Karena traverse adalah fungsi dari pohon ke pohon, Anda dapat melintasi semua subpohon dalam daftar dengan map (dan Anda tidak memerlukan kasus khusus):

fun traverse (leaf x) = leaf x
  | traverse (node xs) = node (map traverse xs)
0
molbdnilo 20 November 2020, 10:03