3

だから、私はHaskell(およびプログラミング全般)にちょっと慣れていないので、しばらくの間問題を解決しようとしています。入力として2つの英数字(文字列型)を持ち、両方の英数字が同じ長さで、異なる文字が1つしかない場合にのみTrueを返す関数を作成したいと思います。したがって、たとえば、入力がブロックと黒の場合は True になりますが、入力が黒とブレーキの場合は False になります。再帰でこれをやろうとしましたが、惨めに失敗しました。作業中のプログラムの一部の入力をチェックするために使用したいので、この関数が必要です。

お時間をいただきありがとうございます。

4

1 に答える 1

10

私の理解が正しければChar、同じ位置に異なる s が発生するはずですか?

次に、簡単な定義は次のようになると思います。

oneDifferent xs ys = 
   length xs == length ys && 
   1 == length (filter (==False) (zipWith (==) xs ys))

... また ...

oneDifferent xs ys = 
  length xs == length ys &&  
  1 == foldr ((+) . fromEnum) 0 (zipWith (/=) xs ys) where

再帰的な解決策は次のようになります

oneDifferent (x:xs) (y:ys) 
  | x /= y = xs == ys
  | otherwise = oneDifferent xs ys 
oneDifferent _ _ = False   
于 2012-11-14T13:45:42.063 に答える