小编Ole*_*leg的帖子

Ocaml中参数的评估顺序

我想知道为什么ocaml从右到左评估调用,是FP原则还是根本不重要FP语言?

快速举例:

let rec qs = function
    | [] -> []
    | h::t -> let l, r = List.partition ((>) h) t in
    List.iter (fun e -> print_int e; print_char ' ') l; Printf.printf " <<%d>> " h;
    List.iter (fun e -> print_int e; print_char ' ') r; print_char '\n';
    (qs l)@(h::qs r)
Run Code Online (Sandbox Code Playgroud)

在我的例子中,(qs r)首先评估调用,然后(qs l)我预计它将是另外的.

# qs [5;43;1;10;2];;
1 2  <<5>> 43 10 
10   <<43>> 
     <<10>> 
     <<1>> 2 
     <<2>> 
- : int list = [1; …
Run Code Online (Sandbox Code Playgroud)

ocaml arguments functional-programming function

2
推荐指数
1
解决办法
652
查看次数

直接在Haskell类中定义一个空容器?

我的任务是实现这些功能,但我先陷入困境.

为什么我不能这样写empty?(ghci抱怨:couldn't match type)

我不是说那[]应该是type m k v吗?

class MapLike m where
    empty :: m k v
    empty = [] :: m k v
    lookup :: Ord k => k -> m k v -> Maybe v

newtype ListMap k v = ListMap { getListMap :: [(k,v)] } deriving (Eq,Show)
Run Code Online (Sandbox Code Playgroud)

haskell typeclass

1
推荐指数
1
解决办法
181
查看次数

二叉树语法错误

我不知道我不能像这样定义bin_tree:

type 'a bin_tree = Node of { data : 'a ; left : 'a bin_tree; right : 'a bin_tree; } | Leaf
Run Code Online (Sandbox Code Playgroud)

Merlin告诉我:内部错误,期待_

ocaml

0
推荐指数
1
解决办法
61
查看次数

连续组合相似的元素

我是Haskell的新手,这就是我想做的事情: 在此输入图像描述

到目前为止只有编译错误:

groupElems :: Eq a => [a] -> [[a]]
groupElems [] = []
groupElems (x:xs) = 
    let (a,b) = span (<= x) xs
    in a : (groupElems b)
Run Code Online (Sandbox Code Playgroud)

谢谢.

错误:

Could not deduce (Ord a) arising from a use of ‘<=’
from the context (Eq a)
  bound by the type signature for groupElems :: Eq a => [a] -> [[a]]
Run Code Online (Sandbox Code Playgroud)

haskell

0
推荐指数
1
解决办法
134
查看次数