小编nek*_*k28的帖子

为什么ML/Haskell数据类型对于定义像算术表达式这样的"语言"很有用?

对于像ML系列那样的函数式语言,这是一个关于静态类型系统的软问题.我理解为什么你需要数据类型来描述像列表和树这样的数据结构,但是像数据类型中的命题逻辑那样定义"表达式"似乎带来了一些便利并且不是必需的.例如

datatype arithmetic_exp = Constant of int
                        | Neg of arithmetic_exp
                        | Add of (arithmetic_exp * arithmetic_exp)
                        | Mult of (arithmetic_exp * arithmetic_exp)
Run Code Online (Sandbox Code Playgroud)

定义一组值,您可以在其上编写一个eval可以为您提供结果的函数.你也可以同样定义了4个功能:const: int -> int,neg: int -> int,add: int * int -> intmult: int * int -> int,然后排序的表达add (mult (const 3, neg 2), neg 4)会给你同样的事情,不带静电安全的任何损失.唯一的复杂因素是你必须做四件事而不是两件事.在学习SML和Haskell时,我一直在考虑哪些功能为您提供了必要的东西,哪些只是一种便利,所以这就是我要问的原因.我想如果你想要从值本身分离一个值的过程,这就很重要,但我不确定哪个有用.

非常感谢.

haskell types ml

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

当使用字符串文字初始化时,std :: strings是否以'\ 0'结尾?

我知道字符串对象不是空终止但为什么这应该工作?

std::string S("Hey");
for(int i = 0; S[i] != '\0'; ++i)
   std::cout << S[i];
Run Code Online (Sandbox Code Playgroud)

所以构造函数也复制了null终止符,但是不增加长度?为什么这么麻烦?

c++ string null-terminated subscript-operator

5
推荐指数
2
解决办法
2427
查看次数

我写的是一个真正的monad?

我一直在努力了解monad,因为我最近了解拉链是什么,我认为我可能会尝试将两种想法结合起来.(>> =)做我认为monad应该做的事情,即它让我以拉链的形式组合运动,moveRight >>= moveLeft >>= goAhead >>= return但我觉得我错过了一些东西,因为,除其他外,我似乎不适合它的类型一个单子应该是什么,即Ma -> (a -> Mb) -> Mb.欢迎任何帮助.

module MonadZipper where

import Prelude hiding (return, (>>=))

data Node a = Fork a (Node a) (Node a)
            | Passage a (Node a)
            | DeadEnd a
              deriving (Show)

data Branch a = TurnLeft a (Node a)
              | TurnRight a (Node a)
              | StraightAhead a
                deriving (Show)

type Trace a = [Branch a]
type Zipper a = (Trace a, Node a)


type Movement …
Run Code Online (Sandbox Code Playgroud)

monads haskell functional-programming

5
推荐指数
1
解决办法
116
查看次数

C中的指针何时计算出它引用的内存量?

我一直在学习链表和节点结构的递归定义一直困扰着我

struct node {
    struct node *next;
    int data;
};
Run Code Online (Sandbox Code Playgroud)

我想我总是想象自从键入指针后,它会在声明时知道起始地址和它在解除引用时可以访问的内存量.但它不可能,因为它是在任意数量的其他变量之前声明的,这些变量可以构成任何大小的结构.它是仅在取消引用时才弄明白,还是某种内存表在结构定义的末尾和指针可以使用之前被填充?

c struct types pointers member-variables

3
推荐指数
1
解决办法
111
查看次数