我在类中定义了一个属性,如:
type Customer() =
let mutable _lastName = String.Empty
member val LastName = _lastName with get
Run Code Online (Sandbox Code Playgroud)
在方法QueryData中,我为_lastName赋值:
member self.QueryData () =
// CODE
let addressData = bp.GetStructure("PE_PERSONALDATA")
_lastName <- addressData.GetString("LASTNAME")
null
| RfcCommunication ex ->
let basedComm = ex :> Exception
basedComm
| RfcLogon ex ->
let basedLogon = ex :> Exception
basedLogon
| RfcAbapRuntime ex ->
let basedAbap = ex :> Exception
basedAbap
Run Code Online (Sandbox Code Playgroud)
在main函数中,我创建了一个Customer()实例并读取LastName属性:
[<EntryPoint>]
let main argv =
let customer = CustomerBapi.Customer()
let ex = customer.QueryData()
if ex …Run Code Online (Sandbox Code Playgroud) 当我在iex中写这个
iex> 'he??o'
Run Code Online (Sandbox Code Playgroud)
它向我展示了代码点
[104, 101, 322, 322, 111]
Run Code Online (Sandbox Code Playgroud)
我知道因为单引号字符串代表char列表.但是当我在iex中输入带有上述数字的列表时,它会显示一个带有数字的列表,而不是hełło
iex(13)> [104, 101, 322, 322, 111]
[104, 101, 322, 322, 111]
Run Code Online (Sandbox Code Playgroud)
为什么它没有给我看人物?
当我输入
iex(3)> a = [67,55,44]
Run Code Online (Sandbox Code Playgroud)
进入iex,我有以下角色
'C7,'
Run Code Online (Sandbox Code Playgroud)
什么,当我想要iex显示数字而不是字符?
为什么我可以在这里传递一个原子作为arity?
iex> to_string :hello
"hello"
Run Code Online (Sandbox Code Playgroud) 我有以下lambda演算:
(?x. + (- x 1)) 9 3
Run Code Online (Sandbox Code Playgroud)
正确的beta减少是:
+ (- 9 1) 3
Run Code Online (Sandbox Code Playgroud)
我犯了一个错误,取而代之的是9号码:
+ (- 3 1) 9
Run Code Online (Sandbox Code Playgroud)
而且我得到了相同的结果.
在与解决方案进行比较之前,我没有意识到这是错误的.
我是否必须采取最接近的替代,在这种情况下是9?
我有以下操作:
Prelude> mod (3 - 12) 7
Run Code Online (Sandbox Code Playgroud)
结果我有5个.
为什么结果是5?
当我尝试这样的事情时:
Prelude> mod -9 7
Run Code Online (Sandbox Code Playgroud)
然后我有错误:
<interactive>:6:1: error:
• Non type-variable argument
in the constraint: Num (t -> a -> a -> a)
(Use FlexibleContexts to permit this)
• When checking the inferred type
it :: forall a t.
(Num (t -> a -> a -> a), Num (a -> a -> a), Num t, Integral a) =>
a -> a -> a
Run Code Online (Sandbox Code Playgroud)
为什么?
我忘了提,我刚开始学习哈斯克尔.
我在前奏中尝试了以下表达式:
let x = x in x
Run Code Online (Sandbox Code Playgroud)
我有以下例外
Exception: <<loop>>
Run Code Online (Sandbox Code Playgroud)
为什么表达式是递归的?
我有很多类型声明:
module SumProduct where
data GuessWhat = Chickenbutt deriving (Eq, Show)
data Id a = MkId a deriving (Eq, Show)
data Product a b = Product a b deriving (Eq, Show)
data Sum a b = First a
| Second b
deriving (Eq, Show)
data RecordProduct a b = RecordProduct { pfirst :: a , psecond :: b }
deriving (Eq, Show)
newtype NumCow = NumCow Int deriving (Eq, Show)
newtype NumPig = NumPig Int deriving (Eq, Show)
data Farmhouse …Run Code Online (Sandbox Code Playgroud) 我有一个treeBuild函数没有得到编译,因为where子句中的签名:
unfold :: (a -> Maybe (a,b,a)) -> a -> BinaryTree b
unfold f x = case f x of Nothing -> Leaf
Just (s,t,u) -> Node (unfold f s) t (unfold f u)
treeBuild :: Integer -> BinaryTree Integer
treeBuild n = unfold f 0
where f :: a -> Maybe (a,b,a)
f x
| x == n = Nothing
| otherwise = Just (x+1, x, x+1)
Run Code Online (Sandbox Code Playgroud)
我有以下编译器错误:
* Couldn't match expected type `a' with actual type …Run Code Online (Sandbox Code Playgroud) 我正在努力学习haskell并阅读haskellbook.
在书中,作者提到了更大的类型如下:
instance Monoid b => Monoid (a -> b)
instance (Monoid a, Monoid b) => Monoid (a, b)
instance (Monoid a, Monoid b, Monoid c) => Monoid (a, b, c)
Run Code Online (Sandbox Code Playgroud)
这些Monoids的共同之处在于它们通过重用代表较大类型组件的类型的Monoid实例,为更大的类型提供了一个新的Monoid.
对于更大的数据类型,他的意思是什么?
我有以下数据类型并已应用于Functor实例:
data Company a b c =
DeepBlue a c
| Something b
instance Functor (Company a b) where
fmap f (Something b) = Something b
fmap f (DeepBlue a c) = DeepBlue a (f c)
Run Code Online (Sandbox Code Playgroud)
它编译没有任何抱怨.
然后我玩了一下(我知道它不起作用),因为初学者的好奇心:
data Company a b c =
DeepBlue a c
| Something b
instance Functor (Company a b) where
fmap f (Something b) = Something (f b)
fmap f (DeepBlue a c) = DeepBlue a (f c)
Run Code Online (Sandbox Code Playgroud)
然后编译器抱怨:
D:\haskell\chapter16\src\ChapterExercises.hs:18:26: error:
* …Run Code Online (Sandbox Code Playgroud) 我试图理解应用仿函数的交换法则:
u <*> pure y = pure ($ y) <*> u
Run Code Online (Sandbox Code Playgroud)
让我困惑的是,函数应用程序$ y,请考虑以下示例:
($ 2) :: (a -> b) -> b
Run Code Online (Sandbox Code Playgroud)
为什么第二个参数不应用于第一个?