有谁知道以下代码中':>'构造函数的含义是什么:
data Rose a = a :> [Rose a]
    deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud) 根据我大学的逻辑课程,我们可以预期Prolog定义的结果与以下查询不同:
append([], a, X)
Run Code Online (Sandbox Code Playgroud)
(统一为X=a).
但是我不明白他们的目标是什么?应该期望什么作为有效的响应,因为append应该统一X(在这个例子中)[]和a?的串联?
我认为他们可能期待回归false或[a]; 然而,我想应该是级联的结果a和[],而不是[]和a(因为[]是的尾部[a]).
我必须使用包含以下数据结构的赋值的代码:
data Rose a =  a :> [Rose a]
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何使用这个数据结构,例如:我如何创建它的实例,我怎么可能循环一个?
如果有人能帮我解决这个问题.
尝试使用以下代码为数据树创建可折叠实例:
data Rose a = a :> [Rose a]
    deriving (Eq, Show)
instance Foldable Rose where
    fold (a:>b) =  a <> (map fold b)
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用,它产生的错误:
Could not deduce <m ~ [m]>
from the context <Monoid m>
  bount by the type signature for fold :: Monoid m => Rose m -> m
...
In the return type of a call of 'map'
...
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么/如何使它工作?
我想知道是否有一种有效/简单的方法来通过匹配设置顺序的另一个列表的值来重新排序列表列表.更具体地说,如果我有以下列表:
[["a", "1", "2"], ["b", "2", "3"]]
Run Code Online (Sandbox Code Playgroud)
我想订购以下列表:
["b", "a"]
Run Code Online (Sandbox Code Playgroud)
产生新订单:
[["b", "2", "3"], ["a", "1", "2"]]
Run Code Online (Sandbox Code Playgroud)
有谁知道如何做到这一点?
提前致谢!
最诚挚的问候,Skyfe.
运算符<>在以下代码中的含义是什么?
class Functor f => Foldable f where
    fold    :: Monoid m =>             f m -> m
    foldMap :: Monoid m => (a -> m) -> f a -> m
instance Foldable [] where
    fold = foldr (<>) mempty
Run Code Online (Sandbox Code Playgroud)
有人能告诉我吗?
我认为以下代码应该工作:
sum_up x = loop_it 0 x
    where loop_it sum i | i > 0     = loop_it sum+i i-1
                        | i == 0    = sum
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
<interactive>:3:15: error:
    • Occurs check: cannot construct the infinite type:
        t2 ~ (t0 -> t2) -> t2
      Expected type: t2 -> t2
        Actual type: t2 -> (t0 -> t2) -> t2
    • In an equation for ‘sum_up’:
          sum_up x
            = loop_it 0 x
            where
                loop_it sum i
                  | i > 0 = loop_it sum …Run Code Online (Sandbox Code Playgroud) 我是Haskell的新手,我正在尝试使用:运算符将字符串添加到字符串列表中,但不知怎的,它无法正常工作......此代码正在运行:
sl:(printH header):sl:(map printR t)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在最后添加字符串sl时,如下所示:
sl:(printH header):sl:(map printR t):sl
Run Code Online (Sandbox Code Playgroud)
它抛出一个错误,这对我没有任何意义(sincwe其他连接确实顺利):
Couldn't match type '[Char]' with 'Char'
Expected type: [String] -> Char
  Actual type: [String] -> String
In the first argument of 'map', namely 'printR'
...
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样?