小编Car*_*ten的帖子

AST和Harsell中的解析

我有一个任务,我无法弄清楚如何定义答案.

分配

写功能 exp:: [String] -> (AST, [String])

AST:

  • 如果x是数字,应该说Number x.
  • 如果它是"+"og和" - "应该说Atom x.
  • 如果它读取"(",那么"("直到它出现")后面的所有内容""应该是一个列表[AST].

这样输出将是:

exp (token "(hi (4) 32)")
> (List [Atom "hi", List [Number 4], Number 32], [])

exp (token "(+ 3 42 654 2)") 
> (List [Atom "+", Number 3, Number 42, Number 654, Number 2], [])

exp (token "(+ 21 444) junk") 
> (List [Atom "+", Number 21, Number 444], ["junk"])
Run Code Online (Sandbox Code Playgroud)

到目前为止我有什么

我已经有了令牌功能,token :: …

parsing haskell abstract-syntax-tree

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

Haskell继续传递列表中元素的样式索引

我正在努力练习Haskell的一系列例子.我目前正在学习继续传递,但是我对如何实现像list的元素的查找索引这样的函数有点困惑:

index 3 [1,2,3] id = 2
Run Code Online (Sandbox Code Playgroud)

像factorial这样的例子有意义,因为除了乘法之外没有真正的数据处理,但是在索引函数的情况下,我需要将我正在查看的元素与我正在寻找的元素进行比较,并且我似乎无法弄清楚如何使用函数参数来做到这一点.

任何帮助都会很棒.

haskell functional-programming continuation-passing

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

允许多个数据构造函数声明

我目前正在试验数据类型,我遇到了涉及数据构造函数的多个声明的问题.

data DBPosition = Unknown
                | Omega Integer
                | Delta Integer
                deriving (Show, Eq, Ord)

data DBGeometry = Unknown | Cis | Trans
                deriving (Show, Eq, Ord)

data DoubleBond = DoubleBond DBPosition DBGeometry
                deriving (Show, Eq, Ord)
Run Code Online (Sandbox Code Playgroud)

如果我要创建一个诸如 - 的值let bond = DoubleBond Unknown Unknown,那么可以推断出第一个Unknown具有类型,DBPosition而第二个Unknown具有类型DBPosition.不幸的是,这种情况并非如此:

test.hs:6:27:
Multiple declarations of `Unknown'
Declared at: test.hs:1:27
             test.hs:6:27
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)

是否有可用于解决此问题的语言扩展?

haskell

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

如何使用C#添加保存文件对话框

我需要实现类似于Notepads的保存选项.假设我有一个按钮放在a旁边RichTextBox,我想要的是,当点击这个按钮时,会打开一个对话框,它看起来类似于单击另存为时出现的对话框.我想通过在" 保存对话框"中输入文件名来以文本格式保存RichTextBox的内容.

c# wpf notepad richtextbox savefiledialog

4
推荐指数
2
解决办法
2万
查看次数

使用FSharp的Visual Studio中的相对目录路径

我在解决方案目录中有一个文件,如下所示:

在此处输入图片说明

我想将.txt文件之一的内容读入FSI中的字符串中:

open System.IO

[<Literal>]
let path = "../Data/Build_Keynote2014.txt"

let buildKeynote =  File.ReadAllText(path)
Run Code Online (Sandbox Code Playgroud)

问题在于它引发了一个异常:

System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\jamie\AppData\Local\Data\Build_Keynote2014.txt'.
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以引用文件而不使用完整路径?

谢谢

f# visual-studio

4
推荐指数
1
解决办法
1563
查看次数

为什么在获取列表中的所有其他元素时会得到额外的元素?

我是 Haskell 的新手,我不知道为什么我会在列表中获得一个额外的元素。

这是我的代码:

module Test where

    deal list = hand1
        where list' = fst(splitAt 4 list)
              hand1 = [snd list' | list'<- (zip [0..] list), even (fst list')]
Run Code Online (Sandbox Code Playgroud)

如果我要输入:

Test.deal [1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

它拆分要创建的列表以创建两个列表的元组,其中一个长度为 4: ([1,2,3,4],[5,6])

当我尝试获取元组中第一个列表的所有其他元素时,我得到:[1,3,5]而不是[1,3]

任何人都知道为什么它会添加 5,即使它不在列表中?

haskell list

4
推荐指数
1
解决办法
78
查看次数

如果用户没有在C#中选择图像,我想在图片框中加载默认图像

我正在用C#开发一个窗口表单.在我的窗口中有一个图片框.我想如果用户没有选择图像,那么默认图像将被加载到图片框中,该图片框保存在我的项目文件夹中.

提前致谢

c# embedded-resource winforms

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

将类型为"t"的运算符转换为类型为"a-> t"的运算符

这是将类型t的操作符转换为操作符的标准方法a->t吗?即,这是一个实现此功能的lib(fTfunctionTransformer):

fT :: (t -> t -> t) -> (a -> t) -> (a -> t) -> (a -> t)
fT op f1 f2 = \x -> (f1 x) `op` (f2 x)
Run Code Online (Sandbox Code Playgroud)

(我们可以推广到fT :: (t1 -> t2 -> t) -> (t3 -> t1) -> (t3 -> t2) -> t3 -> t)

在学习Yesod时我问这个问题:在这个框架中,我们可以为字段添加验证条件,这要归功于checkBool.例如,我可以创建一个只接受大于100的值的字段:

smallIntField = checkBool (<= 100) "error: this entry has to be smaller than 100" intField
Run Code Online (Sandbox Code Playgroud)

感谢我的"函数变换器",我可以轻松地管理有界值: …

haskell

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

下划线泛型在F#中的作用

简单的问题。_代替通用<>做什么,所以看起来像<_>?

示例代码:

let errorEvent = Event<_>()
Run Code Online (Sandbox Code Playgroud)

另一个例子:

let agent = new ClientAgent<_>(f)
Run Code Online (Sandbox Code Playgroud)

_是什么?F#推理会自动键入吗?

generics f#

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

如何实现一个简单的Subtractable类型类

我想为可减少类型创建一个类型类

  • 值类型实现Ord.
  • 有一个subtract功能.
  • 它支持UTCTime,DoubleInt(或任选的任何Num类型)
  • 有一种Delta类型可能与源值类型不同.例如,值类型为UTCTime,delta类型为NominalDiffTime.对于Int,Doubledelta类型与值类型相同.

    diffUTCTime :: UTCTime - > UTCTime - > NominalDiffTime

  • delta类型应该实现Num.

这根本不起作用,但希望能传达我想要做的事情

class Ord a => Subtractable a where
   -- The type alias for the delta type
   type Num b => b
   -- The subtract function
   subtractValues :: a -> a -> b
Run Code Online (Sandbox Code Playgroud)

haskell typeclass

2
推荐指数
1
解决办法
107
查看次数