这可能不是正确的术语,但希望我可以理解我的观点.
我经常最终做类似的事情:
myVar = 1
f <- function(myvar) { return(myVar); }
# f(2) = 1 now
Run Code Online (Sandbox Code Playgroud)
R愉快地使用了函数范围之外的变量,这让我摸不着头脑,想知道我怎么可能得到我的结果.
是否有任何选项说"强迫我只使用之前已在此功能范围内分配值的变量"?use strict
例如,Perl就是这样做的.但我不知道R有相当于my
.
编辑:谢谢,我知道我对他们的看法不同.实际上,这个例子是专门为说明这个问题而创建的!
我想知道当我这样做时R是否可以自动警告我.
编辑2:此外,如果Rkward或其他IDE提供此功能,我也想知道.
有些戒指可以配备标准功能:
class (Ring.C a) => EuclideanDomain a where
norm :: a -> Integer
Run Code Online (Sandbox Code Playgroud)
使用此功能,可以以明显的方式订购戒指:
compare x y = compare (norm x) (norm y)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何表明这一点.我试着这样做
instance (EuclideanDomain a, Eq a) => Ord a where
Run Code Online (Sandbox Code Playgroud)
但这给了我一些警告,当我启用相关的编译器标志时,它告诉我"约束不小于实例头" - 如果我启用UndecidableInstances,一切都会变成地狱.
有办法做我想要的吗?
在Haskell中,明确声明函数的类型签名被认为是一种好习惯,即使它(通常)可以推断出来.看起来这在OCaml中甚至不可能,例如
val add : int -> int -> int ;;
Run Code Online (Sandbox Code Playgroud)
给了我一个错误.(虽然我可以制作type
只提供签名的模块.)
我不需要任何花哨的东西; 基本上,如果它会让我做一些基本的Matrix*Matrix的东西,我会很高兴.
在HTML 5中,我们可以将输入标记为required
,然后使用[required]
CSS中的伪选择器选择它们.但是我只想在他们尝试提交表单时设置样式而不填写必需的元素.这有选择器吗?弹出的小消息框怎么样?
我有一个简单的图表,我希望x轴上的标签旋转45度.我究竟做错了什么?
Chart c = new Chart();
c.ChartAreas.Add(new ChartArea());
c.Width = 200;
c.Height = 200;
Series mySeries = new Series();
mySeries.Points.DataBindXY(new string[] { "one", "two", "three" }, new int[] { 1, 2, 3 });
mySeries.LabelAngle = 45; // why doesn't this work?
c.Series.Add(mySeries);
Run Code Online (Sandbox Code Playgroud)
输出是:
我正在使用System.Web.UI.DataVisualization.Charting中的图表.
我有一个我经常使用的函数,它允许我以对我来说更自然的方式编写代码.
infixl 6 $:
($:) :: a -> (a -> b) -> b
a $: f = f a
Run Code Online (Sandbox Code Playgroud)
这让我做了类似的事情
let x = getData
$: sort
$: group
$: aggregate
Run Code Online (Sandbox Code Playgroud)
代替
let x = aggregate
$ group
$ sort
$ getData
Run Code Online (Sandbox Code Playgroud)
我最近了解到Clojure内置了类似的内容(我不太了解Clojure,但我认为它会被写入(-> getData sort group aggregate)
?)这让我想知道Haskell是否也内置了它.但Hoogle 没有任何结果.
是否有包含类似内容的标准库?如果我有这样一个共同的部分是特殊的,它可能使我的代码很难让其他人阅读.
我想从基础对生成一个向量空间,它看起来像:
genFromPair (e1, e2) = [x*e1 + y*e2 | x <- [0..], y <- [0..]]
Run Code Online (Sandbox Code Playgroud)
当我检查输出时,它就像我得到的那样[0, e2, 2*e2,...]
(即x
永远不会超过0).当我考虑如何编写代码来执行此列表理解时,哪种有意义.
我写了一些代码来从原点扩展"shell"(首先是0的整数,然后是norm 1,然后是norm 2 ......)但是这有点烦人且特定于Z ^ 2 - 我有为Z ^ 3或Z [i]等重写它.有更清洁的方法吗?
当一个值未通过QuickCheck测试时,我想用它进行调试.有什么方法可以做我喜欢的事情:
let failValue = quickCheck' myTest
in someStuff failValue
Run Code Online (Sandbox Code Playgroud)
如果我的数据read
能够,那么我可能会破解某种方式从IO中获取它,但事实并非如此.
我正在尝试创建环Z/n(像普通算术一样,但模数为整数).一个示例实例是Z4:
instance Additive.C Z4 where
zero = Z4 0
(Z4 x) + (Z4 y) = Z4 $ (x + y) `mod` 4
Run Code Online (Sandbox Code Playgroud)
对于戒指等等.我希望能够快速生成这些东西,我认为这样做的方法是使用模板haskell.理想情况下,我只是想让$(makeZ 4)
它Z4
像上面定义的那样吐出代码.
我虽然遇到了很多麻烦.当我这样做时,genData n = [d| data $n = $n Integer]
我得到"数据/新类型声明中的解析错误".如果我不使用变量[d| data Z5 = Z5 Integer |]
,它确实有效:这必然意味着我正在做一些奇怪的变量.我不确定是什么; 我尝试通过newName构建它们,但似乎也没有用.
任何人都可以帮我解决这里发生的事情吗?
haskell ×5
c# ×1
charts ×1
clojure ×1
css3 ×1
html5 ×1
javascript ×1
ocaml ×1
quickcheck ×1
r ×1
required ×1
syntax ×1
types ×1
validation ×1