1

このような関数を書いています。

func :: IO()
func = putStr print "func = putStr print"

私はそれが間違っていることを知っていますが、アイデアは、出力が次のようになるようにputStr、文字列にprint適用してから同じ文字列に適用することです。"fun = .."

func = putStr print "func = putStr print"

これは私の関数定義と同じです。ありがとう

4

3 に答える 3

6

あなたの目標がクワインを書くことである場合(この記事にも別の Haskell の例を示します)、変数のキャプチャーにラムダ表記を使用できます。

func = (\x -> putStr x >> print x) "func = (\\x -> putStr x >> print x) "
于 2010-03-29T18:57:54.207 に答える
2

あなたはこのようにそれを行うことができます:

doActions str actions = mapM_ ($ str) actions
于 2010-03-29T19:01:19.113 に答える
2

「使用せずに」の部分でどこに行くのかわかりませ>>んが(それが本当に重要な場合は - 表記法を使用しdoます)、同じ入力に2つの関数を順番に適用するヘルパー関数を簡単に書くことができます:

tee f g s = f s >> g s

func = tee putStr print "..."

また、文字列の繰り返しを避けるために、letorを使用したローカル変数whereがおそらく最も簡単です。

let s = "..."
in  putStr s >> print s
于 2010-03-29T18:52:59.583 に答える