是否有类型化的编程语言,我可以约束类型,如下面的两个例子?
概率是一个浮点数,最小值为0.0,最大值为1.0.
type Probability subtype of float
where
max_value = 0.0
min_value = 1.0
Run Code Online (Sandbox Code Playgroud)离散概率分布是一个映射,其中:键应该都是相同的类型,值都是概率,值的总和= 1.0.
type DPD<K> subtype of map<K, Probability>
where
sum(values) = 1.0
Run Code Online (Sandbox Code Playgroud)据我所知,Haskell或Agda无法做到这一点.
我是OCaml的新手并且阅读了Real World OCaml(RWO)一书.模式匹配在第3章中描述,与Erlang(或Prolog)的模式匹配相比似乎很弱.
我的问题是:
一个具体的例子:
以下功能(取自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) 网站通常允许用户指定分页表中每页显示的项目数。我想用 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)
谨致谢意和良好祝愿
伊万
在阅读《 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)