我已将问题(表格布局算法)减少到以下问题:
想象一下,我有N个变量X 1,X 2,...,X ñ.我也有一些(未确定的)不等式,例如:
X 1 > = 2
x 2 + X 3 > = 13
等
每个不等式是一个或多个变量的总和,并且始终使用> =运算符将其与常量进行比较.我不能事先说出每次会有多少不等式,但所有变量都必须是非负的,所以每个变量已经是一个.
如何以这种方式解决这个系统,变量的值尽可能小?
补充:阅读维基百科文章并意识到我忘了提到变量必须是整数.猜猜这让NP很难,是吧?
我有一个用ocamlyacc和ocamllex编写的解析器和词法分析器.如果要解析的文件过早结束,就像在行末尾忘记分号一样,应用程序不会引发语法错误.我意识到这是因为我正在提高并捕获EOF,这使得词法分析器忽略了未完成的规则,但是我应该怎么做才能引发语法错误?
这是我当前的解析器(简化),
%{
let parse_error s = Printf.ksprinf failwith "ERROR: %s" s
%}
%token COLON
%token SEPARATOR
%token SEMICOLON
%token <string> FLOAT
%token <string> INT
%token <string> LABEL
%type <Conf.config> command
%start command
%%
command:
| label SEPARATOR data SEMICOLON { Conf.Pair ($1,$3) }
| label SEPARATOR data_list { Conf.List ($1,$3) }
| label SEMICOLON { Conf.Single ($1) }
label :
| LABEL { Conf.Label $1 }
data :
| label { $1 }
| INT { Conf.Integer …Run Code Online (Sandbox Code Playgroud) 我经常需要匹配应该具有相同构造函数的元组元组.最后,笼子_,_总是炙手可热.这当然是脆弱的,添加到该类型的任何其他构造函数将完全编译.我目前的想法是连接第一个但不是第二个参数的匹配.但是,还有其他选择吗?
例如,
type data = | States of int array
| Chars of (char list) array
let median a b = match a,b with
| States xs, States ys ->
assert( (Array.length xs) = (Array.length ys) );
States (Array.init (Array.length xs) (fun i -> xs.(i) lor ys.(i)))
| Chars xs, Chars ys ->
assert( (Array.length xs) = (Array.length ys) );
let union c1 c2 = (List.filter (fun x -> not (List.mem x c2)) c1) @ c2 in
Chars …Run Code Online (Sandbox Code Playgroud) 嘿伙计们,我对OCaml和模式匹配都很陌生,所以我很难解决这个问题.
假设我有一个元组列表.我想要做的是根据元组中的第一个元素将参数与其中一个元组进行匹配,在这样做时,我想返回元组的第二个元素.所以,例如,我想做这样的事情:
let list = [ "a", 1; "b", 2; "c", 3; "d", 4 ] ;;
let map_left_to_right e rules = match e with
| first -> second
| first -> second
| first -> second
Run Code Online (Sandbox Code Playgroud)
如果我使用map_left_to_right"b"列表,我想得到2作为回报.因此,我想列出规则列表中的所有第一个元素,并将参数与这些元素中的一个匹配,但我不知道该怎么做.我在想我需要使用List.iter或List.for_all来做这样的事情.任何帮助,将不胜感激.谢谢!
我正在尝试发布一些软件,目前正在编写构建过程的脚本.我陷入了一些我从未想过会发生的事情,在x86_64 linux上静态链接LAPACK.在配置AC_SEARCH_LIB([main],[lapack])工作期间,但是lapack单元的编译不起作用,例如undefiend reference to 'dsyev_'--no lapack/blas例程不被注意.
我已经确认我已经安装了库,甚至自己用适当的选项编译它们,使它们具有相同的结果.
这是我几年前第一次使用LAPACK时使用的一个例子,它可以动态地工作,但不是静态工作:http://pastebin.com/cMm3wcwF
我用来编译的两个方法如下,
gcc -llapack -o eigen eigen.c
gcc -static -llapack -o eigen eigen.c
Run Code Online (Sandbox Code Playgroud) 我有一个生成斐波那契数的函数:
let rec fib n =
match n with
| (0 | 1) -> 1
| x when x > 0 -> (fib (x-2) + fib (x-1))
| _ -> raise (Invalid_argument "Negative value supplied to fib");;
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是它返回所述数字的列表。我试过这个:
let rec fib n list =
match n with
| (0 | 1) -> 1 :: []
| x when x > 0 -> (fib (x-2) list + fib (x-1) list) :: list
| _ -> raise (Invalid_argument "Negative value supplied to …Run Code Online (Sandbox Code Playgroud) 我有这个模块类型:
module type MOD =
sig
type operand
type op
val print : op -> string
end;;
Run Code Online (Sandbox Code Playgroud)
MOD的实现是:
module M1:MOD =
struct
type operand = Mem of int | Reg of int | Const of int
type op = Add of operand * operand| Sub of operand * operand
let print op = match op with
| Add _ -> "Add"
| Sub _ -> "Sub"
end;;
Run Code Online (Sandbox Code Playgroud)
我想创建一个参数化模块,op从第一个模块获取类型,并在该类型的变量上实现函数.像这样:
module ARCHI = functor (M : MOD) ->
struct
type …Run Code Online (Sandbox Code Playgroud) 如何在OCaml中编写一个函数,其中一个或多个参数是可选的?
let foo x y z = if(x+y > z) then true else false;;
Run Code Online (Sandbox Code Playgroud)
如果foo没有收到z它0用作的参数z.
foo 3 3 2 -> true
foo 3 3 10 -> false
foo 2 1 -> true
Run Code Online (Sandbox Code Playgroud)
是否有任何OCaml功能来实现这一目标?
type node = {
lan: string;
lat: string;
};;
let rec read_nodes_from_list list = match list with
| Xml.Element("node", _, _)::list' -> {lan="A"; lat="B"}::read_nodes_from_list list'
;;
Run Code Online (Sandbox Code Playgroud)
我试过这个来创建一个节点记录,但它不起作用.假设我有另一种类型具有相同属性的节点,如何告诉ocaml要创建哪种类型的对象?
谢谢.
我是ocaml的新手,通过了一些教程,并认为下一步,我会通过阅读一些OOS来熟悉语法.所以我从Facebook 下载了Flow.
但是,我使用"|>"遇到了一些奇怪的语法,我无法弄清楚.
首先我在这里遇到了"|>" :
args = CommandSpec.ArgSpec.(
empty
|> flag "--tokens" no_arg
~doc:"Include a list of syntax tokens in the output"
|> flag "--pretty" no_arg
~doc:"Pretty-print JSON output"
|> CommandUtils.from_flag
|> anon "file" (optional string) ~doc:"[FILE]"
)
Run Code Online (Sandbox Code Playgroud)
当我在寻找它的定义时,我在另一个文件中找到了这个:
let (|>) (o : 'a) (f : 'a -> 'b) : 'b = f o
Run Code Online (Sandbox Code Playgroud)
但我不太清楚它在做什么,或者它是否相关.
你能帮忙吗?