1

ブールリストの値がいくつ真であるかを数えるように求めるこの演習を行っています。

私はこれを入力しました:

fun countt xs = foldl (fn (x,y) => if x=true then y=y+1) 0 xs; 

明らかに、これは間違っています。次のエラーが発生します。

stdIn:54.21-54.24 Error: syntax error: deleting  RPAREN INT0

少し調べてみたところ、RPARENが構文エラーであることがわかりました。しかし、そもそもなぜ問題があるのか​​理解できません。

4

2 に答える 2

3

関数型プログラミング言語では、if式にはthenブランチとelseブランチの両方が必要です(両方とも同じタイプである必要があります)。if式にはthenブランチしかありません。

さらに、x=true常にと同じ値に評価されるため、とx書くことができますif x then ... else ...

最後に、thenブランチで割り当てを書き込もうとしているようです。foldlはy、リストを.でトラバースするときに、アキュムレータ()を関数に繰り返し渡すことで機能することを忘れないでくださいxs。したがって、アキュムレータを更新する場合は、更新された値を返すだけです。

于 2012-11-22T02:12:47.813 に答える
0

ここで前の答えを補足するために、提案された変更があります。

fun countt xs = foldl (fn (x,acc) => if x then acc+1 else acc) 0 xs; 
于 2017-06-29T18:49:38.787 に答える