代数数据类型的"代数"表达式对于具有数学背景的人来说非常具有启发性.让我试着解释一下我的意思.
定义了基本类型
•+X1并使用简写X²的X•X和2X对X+X等等,我们就可以定义如链表代数表达式
data List a = Nil | Cons a (List a) ↔ L = 1 + X • L
和二叉树:
data Tree a = Nil | Branch a (Tree a) (Tree a) ↔ T = 1 + X • T²
现在,我作为数学家的第一直觉是坚持这些表达方式,并试图解决L和T.我可以通过重复替换来做到这一点,但似乎更容易滥用符号,并假装我可以随意重新排列.例如,对于链接列表:
L = 1 + X • L
(1 - X) • L = 1
L = 1 …
ocaml haskell functional-programming algebraic-data-types miranda
如何设置默认选择的行?我想选择一行,获取所选行的数量,indexpath.row然后重新加载表并选择所选行.有谁可以帮助我吗?我可以在方法中获取所选行 - (IBAction)segmentedControlIndexChanged吗?不在didSelectRowAtIndexPath?
这是我的代码,如果它可以帮助您理解
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
//lbl1 = [[UILabel alloc]initWithFrame:CGRectMake(200, 10, 100, 20) ];
// Configure the cell...
NSString *depdateChoosed=[deparatureDates objectAtIndex:depSelectedIndice];
NSString *comeateChoosed=[deparatureDates objectAtIndex:comSelectedIndice];
NSString *choosedDate =[NSString stringWithFormat:@"%@%@",depdateChoosed, comeateChoosed];
NSLog(@"date choisi %@ ",choosedDate);
if(segment.selectedSegmentIndex==0)
{
cell.textLabel.text =[deparatureDates objectAtIndex:indexPath.row];
}
else if(segment.selectedSegmentIndex==1) {
//cell.textLabel.text =[goingBackDates …Run Code Online (Sandbox Code Playgroud) 这是库里 - 霍华德的双重否定的记者a; (a -> r) -> r或者(a -> ?) -> ?,或两者兼而有之?
两种类型都可以在Haskell中编码如下,其中?编码为forall b. b.
p1 :: forall r. ((a -> r) -> r)
p2 :: (a -> (forall b. b)) -> (forall b. b)
Run Code Online (Sandbox Code Playgroud)
Wadler 2003的论文以及 Haskell中的实现似乎采用了前者,而其他一些文献(例如本文)似乎支持后者.
我目前的理解是后者是正确的.我理解前者的风格,因为你可以创建类型的值的困难a,从forall r. ((a -> r) -> r)使用纯计算:
> let p1 = ($42) :: forall r. (Int -> r) -> r
> p1 id
42
Run Code Online (Sandbox Code Playgroud)
这似乎与你不能获得直觉逻辑相矛盾 …
元组的大小没有上限,但是一些Haskell实现可能会限制元组的大小,并限制与较大元组相关联的实例.但是,每个Haskell实现必须支持最大为15的元组,以及Eq,Ord,Bounded,Read和Show的实例.(......)
然而,众所周知,GHC不支持大于62的元组.这是当我尝试在GHCi中创建大小为63的元组时发生的情况:
<interactive>:1:1: error:
A 63-tuple is too large for GHC
(max size is 62)
Workaround: use nested tuples or define a data type
Run Code Online (Sandbox Code Playgroud)
我承认,这是按照哈斯克尔98规范,同时又有大小比62更大的元组很可能是高度不必要的,但我不明白到底为什么,这是因为它是在GHC.
总结一下:
此外:
f1 [] = 1
f1 (x:xs) = x * f1 xs
f2 [] = 0
f2 (x:xs) = 1 + f2 xs
f3 [] = 0
f3 (x:xs) = x + f3 xs
f4 [] = []
f4 (x:xs) = x ++ f4 xs
Run Code Online (Sandbox Code Playgroud)
这些都有一个共同的行为,我究竟如何识别模式并编写高阶函数来捕获它?
以下代码非常清楚:
do
x <- Just 3
y <- Just "!"
Just (show x ++ y)
Run Code Online (Sandbox Code Playgroud)
这里的类型x是Num和y是String.(<-这里用来取出Monad的实际价值)
但是,这个片段对我来说不太清楚:
import Control.Monad.Instances
addStuff :: Int -> Int
addStuff = do
a <- (* 2)
b <- (+ 10)
return (a + b)
Run Code Online (Sandbox Code Playgroud)
这里有什么类型a和类型b?他们似乎像一个Num,但a <- (* 2)和b <- (+ 10)这里看上去很神秘,...
有没有人有这个想法?
在>>=和>>运营商都infixl 1.为什么左关联?
特别是,我观察到等价:
(do a; b; c ) == (a >> (b >> c)) -- Do desugaring
(a >> b >> c) == ((a >> b) >> c) -- Fixity definition
Run Code Online (Sandbox Code Playgroud)
因此do,对于固定性定义自然如何工作的方式不同,这是令人惊讶的.
在Bash中,使用T=content在等号之前或之后没有空格的情况下为变量赋值.
尽管我在shell脚本PWD= /bin/pwd 中看到了以下内容,其中包含等号右侧的空格.
它有什么用途?
我一直在搞乱这个fix功能,我碰巧遇到了这个问题:
? let fix f = let x = f x in x
? fix (+)
<interactive>:15:5:
Occurs check: cannot construct the infinite type: t ~ t -> t
Expected type: t -> t
Actual type: t -> t -> t
Relevant bindings include it :: t (bound at <interactive>:15:1)
In the first argument of ‘fix’, namely ‘(+)’
In the expression: fix (+)
Run Code Online (Sandbox Code Playgroud)
我完全知道为什么会出现这个错误,但我注意到那里有一个有趣的签名:t ~ t -> t.这种类型意味着什么?什么代字号在haskell中的类型签名中意味着什么?他们在哪里使用?
如何安装build-essential的Cygwin?
我尝试过使用:apt-cyg install build-essential
但是不起作用.
Installing build-essential
Package build-essential not found or ambiguous name, exiting
Run Code Online (Sandbox Code Playgroud)
我也有以下问题:
(gedit: 13864): Gtk-WARNING **: can not open display:
Run Code Online (Sandbox Code Playgroud)
所以我无法安装紧缩.看见:
$ make all
Building binary...
/usr/bin/gcc -pthread -Wall -pedantic -std=c99 undefined crunch.c -lm -o crunch
gcc: error: undefined: No such file or directory
Makefile:48: recipe for target 'crunch' failed
make: *** [crunch] Error 1
Run Code Online (Sandbox Code Playgroud)
这有什么问题,我该如何解决?