我有一个任务,我无法弄清楚如何定义答案.
写功能 exp:: [String] -> (AST, [String])
AST:
x是数字,应该说Number x.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 :: …
我正在努力练习Haskell的一系列例子.我目前正在学习继续传递,但是我对如何实现像list中的元素的查找索引这样的函数有点困惑:
index 3 [1,2,3] id = 2
Run Code Online (Sandbox Code Playgroud)
像factorial这样的例子有意义,因为除了乘法之外没有真正的数据处理,但是在索引函数的情况下,我需要将我正在查看的元素与我正在寻找的元素进行比较,并且我似乎无法弄清楚如何使用函数参数来做到这一点.
任何帮助都会很棒.
我目前正在试验数据类型,我遇到了涉及数据构造函数的多个声明的问题.
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)
是否有可用于解决此问题的语言扩展?
我需要实现类似于Notepads的保存选项.假设我有一个按钮放在a旁边RichTextBox,我想要的是,当点击这个按钮时,会打开一个对话框,它看起来类似于单击另存为时出现的对话框.我想通过在" 保存对话框"中输入文件名来以文本格式保存RichTextBox的内容.
我在解决方案目录中有一个文件,如下所示:

我想将.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)
有没有一种方法可以引用文件而不使用完整路径?
谢谢
我是 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,即使它不在列表中?
我正在用C#开发一个窗口表单.在我的窗口中有一个图片框.我想如果用户没有选择图像,那么默认图像将被加载到图片框中,该图片框保存在我的项目文件夹中.
提前致谢
这是将类型t的操作符转换为操作符的标准方法a->t吗?即,这是一个实现此功能的lib(fT如functionTransformer):
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)
感谢我的"函数变换器",我可以轻松地管理有界值: …
简单的问题。_代替通用<>做什么,所以看起来像<_>?
示例代码:
let errorEvent = Event<_>()
Run Code Online (Sandbox Code Playgroud)
另一个例子:
let agent = new ClientAgent<_>(f)
Run Code Online (Sandbox Code Playgroud)
_是什么?F#推理会自动键入吗?
我想为可减少类型创建一个类型类
Ord.subtract功能.UTCTime,Double和Int(或任选的任何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)