小编Iva*_*nin的帖子

是否有可约束类型的语言?

是否有类型化的编程语言,我可以约束类型,如下面的两个例子?

  1. 概率是一个浮点数,最小值为0.0,最大值为1.0.

    type Probability subtype of float
    where
        max_value = 0.0
        min_value = 1.0
    
    Run Code Online (Sandbox Code Playgroud)
  2. 离散概率分布是一个映射,其中:键应该都是相同的类型,值都是概率,值的总和= 1.0.

    type DPD<K> subtype of map<K, Probability>
    where
        sum(values) = 1.0
    
    Run Code Online (Sandbox Code Playgroud)

据我所知,Haskell或Agda无法做到这一点.

haskell agda dependent-type

25
推荐指数
4
解决办法
4225
查看次数

为什么OCaml的模式匹配比Erlang弱?

我是OCaml的新手并且阅读了Real World OCaml(RWO)一书.模式匹配在第3章中描述,与Erlang(或Prolog)的模式匹配相比似乎很弱.

我的问题是:

  1. 为什么OCaml的模式匹配较弱?
  2. OCaml的模式匹配风格有什么优势吗?

一个具体的例子:

以下功能(取自RWO第63页)降级列表

let rec destutter list =
    match list with
    | [] -> []
    | [hd] -> [hd]
    | hd :: hd' :: tl ->
      if hd = hd' then ds1 (hd' :: tl)
      else hd :: ds1 (hd' :: tl)
  ;;

# destutter [1;2;3;3;4;5;5;6];;
- : int list = [1; 2; 3; 4; 5; 6]
Run Code Online (Sandbox Code Playgroud)

在Erlang中,有可能(我认为首选)使用模式匹配而不是条件:

destutter([])      -> [];
destutter([X])     -> [X];
destutter([H,H|T]) -> destutter([H|T]);
destutter([H|T])   -> [H | destutter(T)].
Run Code Online (Sandbox Code Playgroud)

在OCaml中尝试这种事情......

let rec …
Run Code Online (Sandbox Code Playgroud)

erlang ocaml pattern-matching

7
推荐指数
3
解决办法
570
查看次数

在 django-tables2 中动态设置 per_page

网站通常允许用户指定分页表中每页显示的项目数。我想用 django-tables2 来做到这一点。

我可以添加一个“每页显示 [ 5 | 10 | 50 ]”选择框来收集用户的 per_page 参数。

但是,表模板中的“上一页”和“下一页”按钮是超链接,具有 per_page 的硬编码值,例如:

<a href="?per_page=5&page=5">Next</a>
Run Code Online (Sandbox Code Playgroud)

我认为实现这种动态的唯一方法是使用 javascript,例如:

<span onclick="get_table_page(5)">Next</span>
Run Code Online (Sandbox Code Playgroud)

其中函数 get_table_page() 可以从选择框中检索 per_page 参数。

这是最好的方法吗?或者有没有不用javascript的方法?

更新:没有回答问题(如何更改上一页/下一页的 per_page),但是,正如接受的答案指出的那样,用户可以使用更改后的 per_page 参数重新加载当前页面,例如:

<p>Show [ <a href="{% querystring "per_page"=5  %}">5</a>
        | <a href="{% querystring "per_page"=20 %}">20</a>
        | <a href="{% querystring "per_page"=50 %}">50</a>
        ] Items</p>
Run Code Online (Sandbox Code Playgroud)

谨致谢意和良好祝愿

伊万

django-tables2

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

如何将OCaml整数类型限制为整数范围?

在阅读《 Real World OCaml》一书时,我遇到了以下类型声明(第6章:变体):

# type color =
  | Basic of basic_color * weight (* basic colors, regular and bold *)
  | RGB   of int * int * int       (* 6x6x6 color cube *)
  | Gray  of int                   (* 24 grayscale levels *)
;;

type color =
    Basic of basic_color * weight
  | RGB of int * int * int
  | Gray of int
Run Code Online (Sandbox Code Playgroud)

我认为可以进一步限制RGB和Gray变体。例如,RGB元组中的每个int只能具有值0-5。

在Erlang中,我会这样做:

-type rgbint() :: 0 | 1 | 2 | 3 | 4 | 5. …
Run Code Online (Sandbox Code Playgroud)

ocaml types

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