【发布时间】:2021-01-13 11:16:12
【问题描述】:
如何编写一个函数,将列表作为参数并返回一个不属于 Haskell 列表的随机元素?
randomElement [a", "b", "c"]
"z"-- returns any string except "a", "b", "c"
到目前为止,我已经编写了一个递归检查元素是否在列表中的函数。
inList _ [] = False
inList n (x:xs)
| x == n = True
| otherwise = inList x xs
但是我不知道如何修改此函数或如何编写一个附加函数,然后返回一个不是列表成员的元素。
【问题讨论】:
-
你尝试了什么,什么不起作用?
-
您需要更好地定义问题。
randomElement应该如何知道可能结果的“宇宙”是什么?如果您要排除的列表等于全域会发生什么?另外,你知道System.Random这个包吗? -
字符串的一个简单答案:
randomElement xs = 'A' : concat xs。这将始终输出一个不在xs中的字符串。但大概这不是你的意思。 -
还有一点:你的
inList函数是Prelude 中的elem。你函数的最后一行应该是| otherwise = inList n xs -
@PaulJohnson: nitpick:
randomElement [xs] == xsforxs = repeat 'A'。