5

私はPythonforでループを記述しようとしています—関数型プログラミングスタイルです。while

forコンストラクトは問題ないと思いますが、while機能しません。無限に実行されます。

# for loop
lst = [1, 2, 3]
def fun(e):
   return e
print map(fun, lst)


# while loop
i = 1
def whileloop():
    global i
    print i
    i = i+1
while_FP = lambda: ((i < 5) and whileloop()) or while_FP()
while_FP()
4

3 に答える 3

8

FP スタイルは、グローバル状態 (グローバル変数) を使用せず、副作用 (IO など) を最小限に抑えます。while-loop シャウトは次のようになります。

fp_while = lambda pred, fun, acc: (lambda val: fp_while(pred, fun, val) if pred(val) else val)(fun(acc))

print fp_while(lambda x: x < 5, lambda x: x + 1, 1)

副作用が必要な場合:

def add_and_print(x):
   print x
   return x + 1

fp_while(lambda x: x < 5, add_and_print, 1)
于 2012-06-11T13:53:02.867 に答える
-1

おそらくあなたが必要です:

i = 1
def whileloop():
    global i
    print i
    i = i+1
    return True

while_FP = lambda: ((i < 5) and whileloop()) and while_FP()
while_FP()

機能的な観点から、and左側のフィールドがである場合、右側のフィールドを評価しますTrue。を使用して書き直すことorもできます。ちなみに、グローバルを使用するのは良い習慣ではありません。

于 2012-06-11T13:45:24.660 に答える