【问题标题】:Haskell let ..... in let ..... in letHaskell 让 ..... 让 ..... 让
【发布时间】:2017-03-24 20:01:24
【问题描述】:

有一些代码要完成。但我不知道如何处理嵌套的 let in 表达式。就是代码:

data Zutat = Tomate | Fleisch | Salat
data Bun = Weizen | Roggen
data Sosse = Ketchup Sosse | Mayo Sosse | Keine
data Burger = Burger Bun [Zutat] Sosse

我需要完成代码:

let zt =               in -- Zutat
  let so =               in -- Sosse
    let dw =

dw 必须像 dw = Weizen [Tomate,Fleisch,Fleisch] (Mayo (Ketchup Keine))

知道了:

zt = [Tomate,Fleisch,Fleisch]
so = Mayo (Ketchup Keine)
dw = Burger Weizen zt so

但是如何将它构建到 let in 表达式中?

【问题讨论】:

  • 我是否看到逐字复制的作业问题?
  • 家庭作业与否(嗯,它显然是家庭作业,但无论如何......),目前还不清楚你真正想要实现的目标。
  • 我也不明白你为什么要用let 表达式来构造它。 dw = Weizen [Tomate,Fleisch,Fleisch] (Mayo (Ketchup Keine)) 首先有什么问题?构造中没有重复项,因此您也无法节省内存。

标签: haskell let


【解决方案1】:

您可以将这些表达式插入到let 表达式中:

let zt = [Tomate, Fleisch, Fleisch] in
  let so = Mayo (Ketchup Keine) in
    let dw = Burger Weizen zt so in
      ...

或者使用单个let 表达式:

let
  zt = [Tomate, Fleisch, Fleisch]
  so = Mayo (Ketchup Keine)
  dw = Burger Weizen zt so
in ...

完整示例:

data Zutat = Tomate | Fleisch | Salat
  deriving (Show)

data Bun = Weizen | Roggen
  deriving (Show)

data Sosse = Ketchup Sosse | Mayo Sosse | Keine
  deriving (Show)

data Burger = Burger Bun [Zutat] Sosse
  deriving (Show)

main :: IO ()
main = let
  zt = [Tomate, Fleisch, Fleisch]
  so = Mayo (Ketchup Keine)
  dw = Burger Weizen zt so
  in print dw

输出:

Burger Weizen [Tomate,Fleisch,Fleisch] (Mayo (Ketchup Keine))

听起来您需要查阅有关基本 Haskell 语法的参考资料。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-18
    • 2018-06-16
    • 2011-05-20
    • 2017-03-15
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多